Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The Timeout(insert) parameter determines startup timeout threshold #1016

Open
databyjp opened this issue Apr 23, 2024 · 0 comments
Open

The Timeout(insert) parameter determines startup timeout threshold #1016

databyjp opened this issue Apr 23, 2024 · 0 comments
Labels
bug Something isn't working usability

Comments

@databyjp
Copy link
Contributor

Due to the client polling /v1/.well-known/openid-configuration to determine the OIDC config, the now-default 90s timeout for insert operations seem to dictate the timeout period for the client.

It may be preferable to set a separate parameter, or use the init value.

Script to reproduce (vary the insert parameter):

import socket
import time
import threading
import weaviate
from weaviate.classes.init import Timeout, AdditionalConfig
import time

def server_thread(stop_event):
    # Create a TCP/IP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 12345)
    server_socket.bind(server_address)
    server_socket.listen(1)

    # print('Server listening on {}:{}'.format(*server_address))

    while not stop_event.is_set():
        # print('Waiting for a connection...')
        try:
            connection, client_address = server_socket.accept()
        except OSError:
            # Handle potential socket error when shutting down
            break

        try:
            # print('Connection from', client_address)

            # Receive data and simulate a delay
            data = connection.recv(1024)
            # print('Received:', data)
            time.sleep(100)  # Simulate 100 second black hole

            # Do not send a response
        finally:
            connection.close()

    server_socket.close()
    # print('Server stopped')
    return True


def run_weaviate():
    for (port, grpc_port, timeout) in [
        (8080, 50051, 2), # Correct
        (12345, 50051, 2), # REST Black hole
        (8080, 12345, 2), # gRPC Black hole
        (1111, 50051, 2), # Incorrect REST
        (8080, 1111, 2), # Incorrect gRPC
    ]:
        print(f"\n")
        print(f"=" * 80)
        print(f"port={port}, grpc_port={grpc_port}, timeout={timeout}")
        print(f"=" * 80)
        print(f"\n")
        starttime = time.time()
        try:
            client = weaviate.connect_to_local(
                port=port,
                grpc_port=grpc_port,
                additional_config=AdditionalConfig(
                    timeout=Timeout(init=timeout, insert=5)  # Set grpc timeout to 2 seconds, rest timeout to 5 seconds
                )
            )

            assert client.is_ready()
            print("Weaviate is ready")
            client.close()
        except Exception as e:
            print(e)
        print("Time taken: ", time.time() - starttime)
    return True


if __name__ == '__main__':
    stop_event = threading.Event()
    server_thread = threading.Thread(target=server_thread, args=(stop_event,))
    server_thread.start()

    run_weaviate()

    # Set the event to stop the server thread
    stop_event.set()
    server_thread.join()
    print('Main script finished')
@databyjp databyjp added bug Something isn't working usability labels Apr 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working usability
Projects
None yet
Development

No branches or pull requests

1 participant