java.io.EOFException при получении данных из Riak

Я пытаюсь выполнить простую выборку данных в виде строки из Riak.

Мы пытаемся выполнить пример кода и получаем ошибку. Это код Java, написанный для получения данных из Riak.

Я убедился, что riak работает с помощью Sudo Riak Start.

Ошибка следующим образом:

Exception in thread "main" com.basho.riak.client.RiakRetryFailedException: java.io.EOFException
    at com.basho.riak.client.cap.DefaultRetrier.attempt(DefaultRetrier.java:79)
    at com.basho.riak.client.cap.DefaultRetrier.attempt(DefaultRetrier.java:81)
    at com.basho.riak.client.cap.DefaultRetrier.attempt(DefaultRetrier.java:81)
    at com.basho.riak.client.cap.DefaultRetrier.attempt(DefaultRetrier.java:81)
    at com.basho.riak.client.cap.DefaultRetrier.attempt(DefaultRetrier.java:53)
    at com.basho.riak.client.bucket.FetchBucket.execute(FetchBucket.java:72)
    at riak.App.main(App.java:15)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at com.basho.riak.pbc.RiakConnection.receive(RiakConnection.java:110)
    at com.basho.riak.pbc.RiakClient.getBucketProperties(RiakClient.java:697)
    at com.basho.riak.client.raw.pbc.PBClientAdapter.fetchBucket(PBClientAdapter.java:249)
    at com.basho.riak.client.bucket.FetchBucket$1.call(FetchBucket.java:74)
    at com.basho.riak.client.bucket.FetchBucket$1.call(FetchBucket.java:1)
    at com.basho.riak.client.cap.DefaultRetrier.attempt(DefaultRetrier.java:72)
    ... 6 more

Образец кода:

package riak;

import com.basho.riak.client.IRiakClient;
import com.basho.riak.client.IRiakObject;
import com.basho.riak.client.RiakException;
import com.basho.riak.client.RiakFactory;
import com.basho.riak.client.bucket.Bucket;

public class App
{
    public static void main(String[] args) throws RiakException
    {
        //IRiakClient riakClient = RiakFactory.httpClient();
        IRiakClient client = RiakFactory.pbcClient("127.0.0.1", 8098);
        Bucket myBucket = client.fetchBucket("TestBucket").execute();
        IRiakObject myObject = myBucket.fetch("TestKey").execute();
        // note that getValueAsString() will return null here if there's no value in Riak
        System.out.println(myObject.getValueAsString());

        client.shutdown();
    }
}

person Dark Knight    schedule 03.12.2013    source источник
comment
Партнер закрыл соединение.   -  person user207421    schedule 03.12.2013
comment
что ты имеешь в виду? Мы используем локальный хост, и я вижу, что наш сервер riak запущен и работает! Не могли бы вы объяснить? (Извините, я новичок в риаке)   -  person Dark Knight    schedule 03.12.2013
comment
Я имею в виду, что одноранговое приложение, предположительно сервер Riak, закрыло соединение, из которого считывается ваш код, что приводит к возникновению исключения EOFException. Мне кажется совершенно ясным.   -  person user207421    schedule 03.12.2013


Ответы (3)


Большое спасибо за вашу помощь.

Я нашел проблему!

Мой номер порта был 8087 вместо 8098.

Нам нужно настроить это в /etc/riak/app.conf (в настройках API)

Я перенастроил это, и это исправлено.

Благодарю вас!

person Dark Knight    schedule 03.12.2013

Сигнализирует о неожиданном достижении конца файла или конца потока во время ввода. Это исключение в основном используется потоками ввода данных, чтобы сигнализировать об окончании потока. Обратите внимание, что многие другие операции ввода возвращают специальное значение в конце потока, а не вызывают исключение.

и вы можете видеть это, как показано ниже http://docs.oracle.com/javase/7/docs/api/java/io/EOFException.html

person user3059794    schedule 03.12.2013

Порт 8087, потому что вы используете pbcclient. Это правильно. В случае использования httpclient порт по умолчанию 8098. Вот это вас и смутило. И я тоже, хе-хе.

person Joao Lucas Gondim    schedule 26.11.2014