Как использовать GraphSON v2 вместо v3?

Я пытаюсь запустить кусок кода на Python, который использует Cosmos DB из Microsoft Azure. В настоящее время я использую gremlinpython 3.2.6 и последнюю версию Cosmos (по умолчанию в microsoft azure), но, похоже, между ними есть некоторые проблемы совместимости.

Когда я запускаю свой код, я получаю следующую ошибку:

GremlinServerError: 498: 

ActivityId : 5c05bb15-3aa1-41b8-9c10-ab3015152eab
ExceptionType : GraphMalformedException
ExceptionMessage :
    Gremlin Malformed Request: GraphSON v3 IO is not supported.
    GremlinRequestId : 5c05bb15-3aa1-41b8-9c10-ab3015152eab
    Context : global
    GraphInterOpStatusCode : MalformedRequest
    HResult : 0x80131500

Я прочитал, что должен попробовать использовать GraphSON v2 вместо V3, но не знаю, как это сделать, может ли кто-нибудь помочь?

5 ответов

Решение

Добро пожаловать в это сообщество. Вам просто нужно убедиться, что вы используете схему GraphSON v2, поскольку эта версия поддерживается в Azure Cosmos DB. Проверьте используемый json и убедитесь, что он соответствует поддерживаемой схеме. У вас есть несколько примеров по этой ссылке.

Используя C#, если вы поместите свою конфигурацию подключения в Startup.cs, вы можете настроить ее следующим образом:

      services.AddSingleton<GremlinClient>(
            (serviceProvider) =>
            {
                var gremlinServer = new GremlinServer(
                    hostname: "<account>.gremlin.cosmosdb.azure.com",
                    port: <port>,
                    enableSsl: true,
                    username: "/dbs/<db>/colls/<collection>",
                    password: ""
                    );
                var connectionPoolSettings = new ConnectionPoolSettings
                {
                    MaxInProcessPerConnection = 32,
                    PoolSize = 4,
                    ReconnectionAttempts = 3,
                    ReconnectionBaseDelay = TimeSpan.FromSeconds(1),
                };
                var mimeType = "application/vnd.gremlin-v2.0+json";
                return new GremlinClient
                (
                    gremlinServer: gremlinServer,
                    graphSONReader: new GraphSON2Reader(),
                    graphSONWriter: new GraphSON2Writer(),
                    mimeType: mimeType,
                    connectionPoolSettings: connectionPoolSettings
                );
            }
        );

В противном случае вы должны создать клиент gremlin со следующими читателями, писателями и mimeType:

      var mimeType = "application/vnd.gremlin-v2.0+json";
var client = new GremlinClient
(
      gremlinServer: <your server>,
      graphSONReader: new GraphSON2Reader(),
      graphSONWriter: new GraphSON2Writer(),
      mimeType: mimeType,
      connectionPoolSettings: <your connection pool>
 );

По умолчанию gremlin_python использует GraphSONSerializersV3d0, поэтому вам нужно явно передать GraphSONSerializersV2d0 при создании клиента:

from gremlin_python.driver import client, serializer

client.Client(
    message_serializer=serializer.GraphSONSerializersV2d0(),
    password="...",
    traversal_source='g',
    url='wss://...:443/',
    username="/dbs/.../colls/...",
)

Представьте это как mime введите при создании клиента

      var client = new GremlinClient(gremlinServer:gremlinServer,mimeType:GremlinClient.GraphSON2MimeType)

Вам необходимо понизить версию до поддерживаемой версии соединителя. Это относится ко всем языкам программирования. Для Python на момент написания этой статьи это 3.2.7.

Другие вопросы по тегам