Skip to content
New issue

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

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

Already on GitHub? # 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. 그렇게 합시다.

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

No branches or pull requests

3 participants