| 631 | } |
| 632 | |
| 633 | sds catAppendOnlyExpireMemberAtCommand(sds buf, struct redisCommand *cmd, robj **argv, const size_t argc) { |
| 634 | long long when = 0; |
| 635 | int unit = UNIT_SECONDS; |
| 636 | bool fAbsolute = false; |
| 637 | |
| 638 | if (cmd->proc == expireMemberCommand) { |
| 639 | if (getLongLongFromObject(argv[3], &when) != C_OK) |
| 640 | serverPanic("propogating invalid EXPIREMEMBER command"); |
| 641 | |
| 642 | if (argc == 5) { |
| 643 | unit = parseUnitString(szFromObj(argv[4])); |
| 644 | } |
| 645 | } else if (cmd->proc == expireMemberAtCommand) { |
| 646 | if (getLongLongFromObject(argv[3], &when) != C_OK) |
| 647 | serverPanic("propogating invalid EXPIREMEMBERAT command"); |
| 648 | fAbsolute = true; |
| 649 | } else if (cmd->proc == pexpireMemberAtCommand) { |
| 650 | if (getLongLongFromObject(argv[3], &when) != C_OK) |
| 651 | serverPanic("propogating invalid PEXPIREMEMBERAT command"); |
| 652 | fAbsolute = true; |
| 653 | unit = UNIT_MILLISECONDS; |
| 654 | } else { |
| 655 | serverPanic("Unknown expiremember command"); |
| 656 | } |
| 657 | |
| 658 | switch (unit) |
| 659 | { |
| 660 | case UNIT_SECONDS: |
| 661 | when *= 1000; |
| 662 | break; |
| 663 | |
| 664 | case UNIT_MILLISECONDS: |
| 665 | break; |
| 666 | } |
| 667 | |
| 668 | if (!fAbsolute) |
| 669 | when += mstime(); |
| 670 | |
| 671 | robj *argvNew[4]; |
| 672 | argvNew[0] = shared.pexpirememberat; |
| 673 | argvNew[1] = argv[1]; |
| 674 | argvNew[2] = argv[2]; |
| 675 | argvNew[3] = createStringObjectFromLongLong(when); |
| 676 | buf = catAppendOnlyGenericCommand(buf, 4, argvNew); |
| 677 | decrRefCount(argvNew[0]); |
| 678 | decrRefCount(argvNew[3]); |
| 679 | return buf; |
| 680 | } |
| 681 | |
| 682 | sds catCommandForAofAndActiveReplication(sds buf, struct redisCommand *cmd, robj **argv, int argc) |
| 683 | { |
no test coverage detected