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

bop smget 의 key, count 제약 코드 값 수정 #133

Open
SuhwanJang opened this issue Nov 11, 2020 · 8 comments
Open

bop smget 의 key, count 제약 코드 값 수정 #133

SuhwanJang opened this issue Nov 11, 2020 · 8 comments
Assignees

Comments

@SuhwanJang
Copy link

SuhwanJang commented Nov 11, 2020

c-client 에서 bop smget 의 key, count 제약을 cache server 지원과 동일하도록 수정을 검토한다.

  • cache server
 /* In bop smget, max limit on the number of given keys */
 #define MAX_SMGET_KEY_COUNT     10000
 /* In bop smget, max limit on (offset+count) */
 #define MAX_SMGET_REQ_COUNT     2000
  • c-client
#define MEMCACHED_COLL_MAX_BOP_SMGET_KEY_COUNT 2000
#define MEMCACHED_COLL_MAX_BOP_SMGET_ELEM_COUNT 1000

KEY_COUNT(2000) 초과 시 에러를 리턴함.

   for (size_t i=0; i<number_of_keys; i++)
   {
     uint32_t serverkey= key_to_serverkey[i];
     lenkeys[serverkey]+= (key_length[i] + 1); // +1 for the delimeter
     numkeys[serverkey]+= 1;
     if (numkeys[serverkey] > MEMCACHED_COLL_MAX_BOP_SMGET_KEY_COUNT)
     {
       DEALLOCATE_ARRAY(ptr, key_to_serverkey);
       return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
                                  memcached_literal_param("key size for a server should be <= MEMCACHED_COLL_MAX_BOP_SMGET_KEY_COUNT"));
     }
   }
  • java-client
  private static final int MAX_SMGET_COUNT = 1000; // server configuration is 2000.

  /**
   * Max smget key chunk size per request
   */
  public static final int DEFAULT_MAX_SMGET_KEY_CHUNK_SIZE = 500;

KEY_COUNT(500) 초과 시 잘라서 보냄.

@SuhwanJang SuhwanJang self-assigned this Nov 11, 2020
@jhpark816
Copy link
Contributor

@SuhwanJang
어느 정도의 제약을 두는 것이 좋은 지는 다시 검토한 후에 결정합시다.
java client 정보도 처음 코멘트에 추가 부탁해요.

@jhpark816 jhpark816 assigned uhm0311 and unassigned uhm0311 Feb 18, 2022
@jhpark816
Copy link
Contributor

@SuhwanJang
위 코멘트 확인해 주세요.

@SuhwanJang
Copy link
Author

@jhpark816
처음 코멘트에 java client 정보 추가하였습니다.

@jhpark816
Copy link
Contributor

@SuhwanJang
OK. 확인했습니다.
어떻게 정리하면 좋은가요?

@SuhwanJang
Copy link
Author

SuhwanJang commented Feb 18, 2022

@jhpark816
server spec 에 맞추는 것이 일반적인 것 같은데, 기존에 다르게 두었던 것은 성능/안전성 관점에서 client 에는 더 제한적으로 둔 것 같습니다.
이대로 두어도 괜찮아 보이며, 만약 응용에서 제한 올려달라고 하면 java/c clients 의 sync 만 맞춰서 같이 변경하면 될 것 같습니다.

다만, java-client 에서 server 당 요청 가능한 key 최대 개수 제한 두면 좋을 것 같은데 응용에서 사용하고 있는 최대 개수를 알 수 없으므로
서버와 동일하게 10000정도로 두어야 할 것 같습니다.

@jhpark816
Copy link
Contributor

@SuhwanJang

  • long query 가능한 요청이어서 의도적으로 clients에 더 많은 제약을 둔 것이므로, 그대로 두시죠.
  • java client는 N개의 다른 연산으로 요청하기 때문에 key 개수가 많더라도 문제가 없습니다.
  • C client는 전체 key를 1개의 요청으로 보낼려고 하는 것이 문제인 데,
    이 부분을 java client 처럼 N개의 요청으로 나누는 것이 가능한가요?

@SuhwanJang
Copy link
Author

@jhpark816

C client는 전체 key를 1개의 요청으로 보낼려고 하는 것이 문제인 데,
이 부분을 java client 처럼 N개의 요청으로 나누는 것이 가능한가요?

가능은 한데, 다른 연산들도 모두 그렇게 처리해야 일관성 있을 것 같습니다.
응용 요구사항 있을 때 처리해도 되지 않을까요?

@jhpark816
Copy link
Contributor

@SuhwanJang
OK. 그렇게 합시다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants