From d73652119c4eaa69849821e0dd6fa5115c24a642 Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Sun, 29 Dec 2024 12:50:51 +0800 Subject: [PATCH 1/2] build: fix uncorrect path. (#3020) --- .../build-and-release-services-images.yml | 91 ------------------- ...ker-build-and-release-services-images.yml} | 10 +- 2 files changed, 5 insertions(+), 96 deletions(-) delete mode 100644 .github/workflows/build-and-release-services-images.yml rename .github/workflows/{docker-build-and-release.yml => docker-build-and-release-services-images.yml} (97%) diff --git a/.github/workflows/build-and-release-services-images.yml b/.github/workflows/build-and-release-services-images.yml deleted file mode 100644 index d53fd2142..000000000 --- a/.github/workflows/build-and-release-services-images.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: Build and release services Images - -on: - push: - branches: - - release-* - release: - types: [published] - workflow_dispatch: - inputs: - tag: - description: "Tag version to be used for Docker image" - required: true - default: "v3.8.3" - -jobs: - build-and-push: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Log in to Aliyun Container Registry - uses: docker/login-action@v2 - with: - registry: registry.cn-hangzhou.aliyuncs.com - username: ${{ secrets.ALIREGISTRY_USERNAME }} - password: ${{ secrets.ALIREGISTRY_TOKEN }} - - - name: Extract metadata for Docker (tags, labels) - id: meta - uses: docker/metadata-action@v5 - with: - tags: | - type=ref,event=tag - type=schedule - type=ref,event=branch - type=semver,pattern={{version}} - type=semver,pattern=v{{version}} - # type=semver,pattern={{major}}.{{minor}} - type=semver,pattern=release-{{raw}} - type=sha - type=raw,value=${{ github.event.inputs.tag }} - - - name: Build and push Docker images - run: | - ROOT_DIR="build/images" - for dir in "$ROOT_DIR"/*/; do - # Find Dockerfile or *.dockerfile in a case-insensitive manner - dockerfile=$(find "$dir" -maxdepth 1 -type f \( -iname 'dockerfile' -o -iname '*.dockerfile' \) | head -n 1) - - if [ -n "$dockerfile" ] && [ -f "$dockerfile" ]; then - IMAGE_NAME=$(basename "$dir") - echo "Building Docker image for $IMAGE_NAME with tags:" - - # Initialize tag arguments - tag_args=() - - # Read each tag and append --tag arguments - while IFS= read -r tag; do - tag_args+=(--tag "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag") - tag_args+=(--tag "ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME:$tag") - tag_args+=(--tag "registry.cn-hangzhou.aliyuncs.com/openimsdk/$IMAGE_NAME:$tag") - done <<< "${{ steps.meta.outputs.tags }}" - - # Build and push the Docker image with all tags - docker buildx build --platform linux/amd64,linux/arm64 \ - --file "$dockerfile" \ - "${tag_args[@]}" \ - --push "$dir" - else - echo "No valid Dockerfile found in $dir" - fi - done \ No newline at end of file diff --git a/.github/workflows/docker-build-and-release.yml b/.github/workflows/docker-build-and-release-services-images.yml similarity index 97% rename from .github/workflows/docker-build-and-release.yml rename to .github/workflows/docker-build-and-release-services-images.yml index 76602c4d1..a79fab978 100644 --- a/.github/workflows/docker-build-and-release.yml +++ b/.github/workflows/docker-build-and-release-services-images.yml @@ -61,8 +61,8 @@ jobs: - name: Build and push Docker images run: | - ROOT_DIR="build/images" - for dir in "$ROOT_DIR"/*/; do + IMG_DIR="build/images" + for dir in "$IMG_DIR"/*/; do # Find Dockerfile or *.dockerfile in a case-insensitive manner dockerfile=$(find "$dir" -maxdepth 1 -type f \( -iname 'dockerfile' -o -iname '*.dockerfile' \) | head -n 1) @@ -72,14 +72,14 @@ jobs: # Initialize tag arguments tag_args=() - + # Read each tag and append --tag arguments while IFS= read -r tag; do tag_args+=(--tag "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag") tag_args+=(--tag "ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME:$tag") tag_args+=(--tag "registry.cn-hangzhou.aliyuncs.com/openimsdk/$IMAGE_NAME:$tag") done <<< "${{ steps.meta.outputs.tags }}" - + # Build and push the Docker image with all tags docker buildx build --platform linux/amd64,linux/arm64 \ --file "$dockerfile" \ @@ -88,4 +88,4 @@ jobs: else echo "No valid Dockerfile found in $dir" fi - done \ No newline at end of file + done From 435d8bb8bf69c59d4ab482b0050b57b7124e0475 Mon Sep 17 00:00:00 2001 From: chao <48119764+withchao@users.noreply.github.com> Date: Sun, 29 Dec 2024 14:27:35 +0800 Subject: [PATCH 2/2] fix: online status error (#3022) * pb * fix: Modifying other fields while setting IsPrivateChat does not take effect * fix: quote message error revoke * refactoring scheduled tasks * refactoring scheduled tasks * refactoring scheduled tasks * refactoring scheduled tasks * refactoring scheduled tasks * refactoring scheduled tasks * upgrading pkg tools * fix * fix --- go.mod | 4 ++-- go.sum | 4 ++-- pkg/rpccache/online.go | 47 +++--------------------------------------- pkg/rpcli/group.go | 24 +++++++++++++++++++++ 4 files changed, 31 insertions(+), 48 deletions(-) diff --git a/go.mod b/go.mod index 3cbbff3c9..387cb7304 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/gorilla/websocket v1.5.1 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/mitchellh/mapstructure v1.5.0 - github.com/openimsdk/protocol v0.0.72-alpha.68 + github.com/openimsdk/protocol v0.0.72-alpha.69 github.com/openimsdk/tools v0.0.50-alpha.62 github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.18.0 @@ -42,7 +42,6 @@ require ( github.com/spf13/viper v1.18.2 go.etcd.io/etcd/client/v3 v3.5.13 go.uber.org/automaxprocs v1.5.3 - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 golang.org/x/sync v0.8.0 k8s.io/api v0.31.2 k8s.io/apimachinery v0.31.2 @@ -187,6 +186,7 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.7.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/image v0.15.0 // indirect golang.org/x/net v0.29.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect diff --git a/go.sum b/go.sum index 846ef721d..d207325e9 100644 --- a/go.sum +++ b/go.sum @@ -347,8 +347,8 @@ github.com/onsi/gomega v1.25.0 h1:Vw7br2PCDYijJHSfBOWhov+8cAnUf8MfMaIOV323l6Y= github.com/onsi/gomega v1.25.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= github.com/openimsdk/gomake v0.0.15-alpha.2 h1:5Q8yl8ezy2yx+q8/ucU/t4kJnDfCzNOrkXcDACCqtyM= github.com/openimsdk/gomake v0.0.15-alpha.2/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI= -github.com/openimsdk/protocol v0.0.72-alpha.68 h1:Ekn6S9Ftt12Xs/p9kJ39RDr2gSwIczz+MmSHQE4lAek= -github.com/openimsdk/protocol v0.0.72-alpha.68/go.mod h1:Iet+piS/jaS+kWWyj6EEr36mk4ISzIRYjoMSVA4dq2M= +github.com/openimsdk/protocol v0.0.72-alpha.69 h1:b22oY2XTdBR/BePqA73KsrM3GDF3Vk8YcBEXZU4ArJc= +github.com/openimsdk/protocol v0.0.72-alpha.69/go.mod h1:Iet+piS/jaS+kWWyj6EEr36mk4ISzIRYjoMSVA4dq2M= github.com/openimsdk/tools v0.0.50-alpha.62 h1:e/m1XL7+EXbkOoxr/En/612WcOPKOUHPBj0++gG6MuQ= github.com/openimsdk/tools v0.0.50-alpha.62/go.mod h1:JowL2jYr8tu4vcQe+5hJh4v3BtSx1T0CIS3pgU/Mw+U= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= diff --git a/pkg/rpccache/online.go b/pkg/rpccache/online.go index 8f5323477..32b2f2889 100644 --- a/pkg/rpccache/online.go +++ b/pkg/rpccache/online.go @@ -206,16 +206,6 @@ func (o *OnlineCache) GetUserOnlinePlatform(ctx context.Context, userID string) return platformIDs, nil } -// func (o *OnlineCache) GetUserOnlinePlatformBatch(ctx context.Context, userIDs []string) (map[string]int32, error) { -// platformIDs, err := o.getUserOnlinePlatform(ctx, userIDs) -// if err != nil { -// return nil, err -// } -// tmp := make([]int32, len(platformIDs)) -// copy(tmp, platformIDs) -// return platformIDs, nil -// } - func (o *OnlineCache) GetUserOnline(ctx context.Context, userID string) (bool, error) { platformIDs, err := o.getUserOnlinePlatform(ctx, userID) if err != nil { @@ -225,6 +215,9 @@ func (o *OnlineCache) GetUserOnline(ctx context.Context, userID string) (bool, e } func (o *OnlineCache) getUserOnlinePlatformBatch(ctx context.Context, userIDs []string) (map[string][]int32, error) { + if len(userIDs) == 0 { + return nil, nil + } platformIDsMap, err := o.lruCache.GetBatch(userIDs, func(missingUsers []string) (map[string][]int32, error) { platformIDsMap := make(map[string][]int32) usersStatus, err := o.client.GetUsersOnlinePlatform(ctx, missingUsers) @@ -281,40 +274,6 @@ func (o *OnlineCache) GetUsersOnline(ctx context.Context, userIDs []string) ([]s return userIDs, offlineUserIDs, nil } -//func (o *OnlineCache) GetUsersOnline(ctx context.Context, userIDs []string) ([]string, error) { -// onlineUserIDs := make([]string, 0, len(userIDs)) -// for _, userID := range userIDs { -// online, err := o.GetUserOnline(ctx, userID) -// if err != nil { -// return nil, err -// } -// if online { -// onlineUserIDs = append(onlineUserIDs, userID) -// } -// } -// log.ZDebug(ctx, "OnlineCache GetUsersOnline", "userIDs", userIDs, "onlineUserIDs", onlineUserIDs) -// return onlineUserIDs, nil -//} -// -//func (o *OnlineCache) GetGroupOnline(ctx context.Context, groupID string) ([]string, error) { -// userIDs, err := o.group.GetGroupMemberIDs(ctx, groupID) -// if err != nil { -// return nil, err -// } -// var onlineUserIDs []string -// for _, userID := range userIDs { -// online, err := o.GetUserOnline(ctx, userID) -// if err != nil { -// return nil, err -// } -// if online { -// onlineUserIDs = append(onlineUserIDs, userID) -// } -// } -// log.ZDebug(ctx, "OnlineCache GetGroupOnline", "groupID", groupID, "onlineUserIDs", onlineUserIDs, "allUserID", userIDs) -// return onlineUserIDs, nil -//} - func (o *OnlineCache) setUserOnline(userID string, platformIDs []int32) { switch o.fullUserCache { case true: diff --git a/pkg/rpcli/group.go b/pkg/rpcli/group.go index b51283c5d..623c5cc12 100644 --- a/pkg/rpcli/group.go +++ b/pkg/rpcli/group.go @@ -46,3 +46,27 @@ func (x *GroupClient) GetGroupMemberUserIDs(ctx context.Context, groupID string) req := &group.GetGroupMemberUserIDsReq{GroupID: groupID} return extractField(ctx, x.GroupClient.GetGroupMemberUserIDs, req, (*group.GetGroupMemberUserIDsResp).GetUserIDs) } + +func (x *GroupClient) GetGroupMembersInfo(ctx context.Context, groupID string, userIDs []string) ([]*sdkws.GroupMemberFullInfo, error) { + if len(userIDs) == 0 { + return nil, nil + } + req := &group.GetGroupMembersInfoReq{GroupID: groupID, UserIDs: userIDs} + return extractField(ctx, x.GroupClient.GetGroupMembersInfo, req, (*group.GetGroupMembersInfoResp).GetMembers) +} + +func (x *GroupClient) GetGroupMemberInfo(ctx context.Context, groupID string, userID string) (*sdkws.GroupMemberFullInfo, error) { + return firstValue(x.GetGroupMembersInfo(ctx, groupID, []string{userID})) +} + +func (x *GroupClient) GetGroupMemberMapInfo(ctx context.Context, groupID string, userIDs []string) (map[string]*sdkws.GroupMemberFullInfo, error) { + members, err := x.GetGroupMembersInfo(ctx, groupID, userIDs) + if err != nil { + return nil, err + } + memberMap := make(map[string]*sdkws.GroupMemberFullInfo) + for _, member := range members { + memberMap[member.UserID] = member + } + return memberMap, nil +}