commit 06ec35f9605da12f1de6be42020dcd11debd7bde Author: mindol1004 Date: Thu Dec 15 17:10:33 2022 +0900 firstCommit diff --git a/auth-service/.gitignore b/auth-service/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/auth-service/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/auth-service/build.gradle b/auth-service/build.gradle new file mode 100644 index 0000000..da659e2 --- /dev/null +++ b/auth-service/build.gradle @@ -0,0 +1,52 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.6' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +group = 'kiz.app' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +ext { + set('springCloudVersion', "2021.0.5") +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-web' + // implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' + implementation 'org.springframework.cloud:spring-cloud-starter-config' + implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' + implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' + implementation 'io.jsonwebtoken:jjwt-api:0.11.2' + runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2', 'io.jsonwebtoken:jjwt-jackson:0.11.2' + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" + } +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/auth-service/gradle/wrapper/gradle-wrapper.jar b/auth-service/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..249e583 Binary files /dev/null and b/auth-service/gradle/wrapper/gradle-wrapper.jar differ diff --git a/auth-service/gradle/wrapper/gradle-wrapper.properties b/auth-service/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ae04661 --- /dev/null +++ b/auth-service/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/auth-service/gradlew b/auth-service/gradlew new file mode 100644 index 0000000..a69d9cb --- /dev/null +++ b/auth-service/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/auth-service/gradlew.bat b/auth-service/gradlew.bat new file mode 100644 index 0000000..53a6b23 --- /dev/null +++ b/auth-service/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/auth-service/settings.gradle b/auth-service/settings.gradle new file mode 100644 index 0000000..d4c3eb3 --- /dev/null +++ b/auth-service/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'auth-service' diff --git a/auth-service/src/main/java/kiz/app/AuthServiceApplication.java b/auth-service/src/main/java/kiz/app/AuthServiceApplication.java new file mode 100644 index 0000000..a6d6838 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/AuthServiceApplication.java @@ -0,0 +1,17 @@ +package kiz.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@EnableEurekaClient +@EnableFeignClients +@SpringBootApplication +public class AuthServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(AuthServiceApplication.class, args); + } + +} diff --git a/auth-service/src/main/java/kiz/app/api/LoginController.java b/auth-service/src/main/java/kiz/app/api/LoginController.java new file mode 100644 index 0000000..bc86a39 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/api/LoginController.java @@ -0,0 +1,28 @@ +package kiz.app.api; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import kiz.app.dto.LoginRequest; +import kiz.app.dto.TokenInfo; +import kiz.app.service.LoginService; +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/auth") +public class LoginController { + + private final LoginService loginService; + + @PostMapping("/login") + public TokenInfo login(@RequestBody LoginRequest loginRequest) { + String memberId = loginRequest.getMemberId(); + String password = loginRequest.getPassword(); + TokenInfo tokenInfo = loginService.login(memberId, password); + return tokenInfo; + } + +} diff --git a/auth-service/src/main/java/kiz/app/client/MemberClient.java b/auth-service/src/main/java/kiz/app/client/MemberClient.java new file mode 100644 index 0000000..8c2b8f4 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/client/MemberClient.java @@ -0,0 +1,17 @@ +package kiz.app.client; + +import java.util.Optional; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import kiz.app.entity.Member; + +@FeignClient("MEMBER-SERVICE") +public interface MemberClient { + + @GetMapping("/api/member/{memberId}") + Optional findByMemberId(@PathVariable("memberId") String memberId); + +} diff --git a/auth-service/src/main/java/kiz/app/config/FeignClientConfig.java b/auth-service/src/main/java/kiz/app/config/FeignClientConfig.java new file mode 100644 index 0000000..7aa8cc2 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/config/FeignClientConfig.java @@ -0,0 +1,16 @@ +package kiz.app.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import feign.Logger; + +@Configuration +public class FeignClientConfig { + + @Bean + public Logger.Level feignLoggerLevel() { + return Logger.Level.FULL; + } + +} diff --git a/auth-service/src/main/java/kiz/app/config/SecurityConfig.java b/auth-service/src/main/java/kiz/app/config/SecurityConfig.java new file mode 100644 index 0000000..eeb09ac --- /dev/null +++ b/auth-service/src/main/java/kiz/app/config/SecurityConfig.java @@ -0,0 +1,45 @@ +package kiz.app.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import kiz.app.filter.JwtAuthenticationFilter; +import kiz.app.provider.JwtTokenProvider; +import lombok.RequiredArgsConstructor; + +@Configuration +@EnableWebSecurity +@RequiredArgsConstructor +public class SecurityConfig { + + private final JwtTokenProvider jwtTokenProvider; + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .httpBasic().disable() + .csrf().disable() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and() + .authorizeRequests() + .antMatchers("/auth/login").permitAll() + .antMatchers("/auth/test").hasRole("USER") + .anyRequest().authenticated() + .and() + .addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class); + return http.build(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } + +} diff --git a/auth-service/src/main/java/kiz/app/dto/LoginRequest.java b/auth-service/src/main/java/kiz/app/dto/LoginRequest.java new file mode 100644 index 0000000..20406c0 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/dto/LoginRequest.java @@ -0,0 +1,9 @@ +package kiz.app.dto; + +import lombok.Getter; + +@Getter +public class LoginRequest { + private String memberId; + private String password; +} diff --git a/auth-service/src/main/java/kiz/app/dto/Result.java b/auth-service/src/main/java/kiz/app/dto/Result.java new file mode 100644 index 0000000..c88d12d --- /dev/null +++ b/auth-service/src/main/java/kiz/app/dto/Result.java @@ -0,0 +1,24 @@ +package kiz.app.dto; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class Result { + private ResultCode code; + private String message; + private T data; + + @Builder + public Result(ResultCode code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public enum ResultCode { + SUCCESS, ERROR + } +} diff --git a/auth-service/src/main/java/kiz/app/dto/TokenInfo.java b/auth-service/src/main/java/kiz/app/dto/TokenInfo.java new file mode 100644 index 0000000..cbe6074 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/dto/TokenInfo.java @@ -0,0 +1,18 @@ +package kiz.app.dto; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class TokenInfo { + private String grantType; + private String accessToken; + private String refreshToken; + + @Builder + public TokenInfo(String grantType, String accessToken, String refreshToken) { + this.grantType = grantType; + this.accessToken = accessToken; + this.refreshToken = refreshToken; + } +} diff --git a/auth-service/src/main/java/kiz/app/entity/Member.java b/auth-service/src/main/java/kiz/app/entity/Member.java new file mode 100644 index 0000000..c27c286 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/entity/Member.java @@ -0,0 +1,66 @@ +package kiz.app.entity; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class Member implements UserDetails { + + private String memberId; + private String password; + private List roles = new ArrayList<>(); + + @Builder + public Member(String memberId, String password, List roles) { + this.memberId = memberId; + this.password = password; + this.roles = roles; + } + + @Override + public Collection getAuthorities() { + return this.roles.stream() + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + } + + @Override + public String getUsername() { + return memberId; + } + + @Override + public String getPassword() { + return password; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + +} diff --git a/auth-service/src/main/java/kiz/app/filter/JwtAuthenticationFilter.java b/auth-service/src/main/java/kiz/app/filter/JwtAuthenticationFilter.java new file mode 100644 index 0000000..c8feacf --- /dev/null +++ b/auth-service/src/main/java/kiz/app/filter/JwtAuthenticationFilter.java @@ -0,0 +1,48 @@ +package kiz.app.filter; + +import java.io.IOException; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.GenericFilterBean; + +import kiz.app.provider.JwtTokenProvider; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class JwtAuthenticationFilter extends GenericFilterBean { + + private final JwtTokenProvider jwtTokenProvider; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + + // 1. Request Header 에서 JWT 토큰 추출 + String token = resolveToken((HttpServletRequest) request); + + // 2. validateToken 으로 토큰 유효성 검사 + if (token != null && jwtTokenProvider.validateToken(token)) { + // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + chain.doFilter(request, response); + } + + // Request Header 에서 토큰 정보 추출 + private String resolveToken(HttpServletRequest request) { + String bearerToken = request.getHeader("Authorization"); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer")) { + return bearerToken.substring(7); + } + return null; + } + +} diff --git a/auth-service/src/main/java/kiz/app/provider/JwtTokenProvider.java b/auth-service/src/main/java/kiz/app/provider/JwtTokenProvider.java new file mode 100644 index 0000000..b7893a7 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/provider/JwtTokenProvider.java @@ -0,0 +1,115 @@ +package kiz.app.provider; + +import java.security.Key; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.MalformedJwtException; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.UnsupportedJwtException; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; +import kiz.app.dto.TokenInfo; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class JwtTokenProvider { + + private final Key key; + + public JwtTokenProvider(@Value("${jwt.secret}") String secretKey) { + byte[] keyBytes = Decoders.BASE64.decode(secretKey); + this.key = Keys.hmacShaKeyFor(keyBytes); + } + + // 유저 정보를 가지고 AccessToken, RefreshToken 을 생성하는 메서드 + public TokenInfo generateToken(Authentication authentication) { + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + long now = (new Date()).getTime(); + // Access Token 생성 + Date accessTokenExpiresIn = new Date(now + 86400000); + String accessToken = Jwts.builder() + .setSubject(authentication.getName()) + .claim("auth", authorities) + .setExpiration(accessTokenExpiresIn) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); + + // Refresh Token 생성 + String refreshToken = Jwts.builder() + .setExpiration(new Date(now + 86400000)) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); + + return TokenInfo.builder() + .grantType("Bearer") + .accessToken(accessToken) + .refreshToken(refreshToken) + .build(); + } + + // JWT 토큰을 복호화하여 토큰에 들어있는 정보를 꺼내는 메서드 + public Authentication getAuthentication(String accessToken) { + // 토큰 복호화 + Claims claims = parseClaims(accessToken); + + if (claims.get("auth") == null) { + throw new RuntimeException("권한 정보가 없는 토큰입니다."); + } + + // 클레임에서 권한 정보 가져오기 + Collection authorities = + Arrays.stream(claims.get("auth").toString().split(",")) + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + + // UserDetails 객체를 만들어서 Authentication 리턴 + UserDetails principal = new User(claims.getSubject(), "", authorities); + return new UsernamePasswordAuthenticationToken(principal, "", authorities); + } + + // 토큰 정보를 검증하는 메서드 + public boolean validateToken(String token) { + try { + Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + return true; + } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { + log.info("Invalid JWT Token", e); + } catch (ExpiredJwtException e) { + log.info("Expired JWT Token", e); + } catch (UnsupportedJwtException e) { + log.info("Unsupported JWT Token", e); + } catch (IllegalArgumentException e) { + log.info("JWT claims string is empty.", e); + } + return false; + } + + private Claims parseClaims(String accessToken) { + try { + return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(accessToken).getBody(); + } catch (ExpiredJwtException e) { + return e.getClaims(); + } + } + +} diff --git a/auth-service/src/main/java/kiz/app/service/CustomUserDetailsService.java b/auth-service/src/main/java/kiz/app/service/CustomUserDetailsService.java new file mode 100644 index 0000000..47e438b --- /dev/null +++ b/auth-service/src/main/java/kiz/app/service/CustomUserDetailsService.java @@ -0,0 +1,37 @@ +package kiz.app.service; + +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import kiz.app.client.MemberClient; +import kiz.app.entity.Member; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CustomUserDetailsService implements UserDetailsService { + + private final MemberClient memberClient; + private final PasswordEncoder passwordEncoder; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + return memberClient.findByMemberId(username) + .map(this::createUserDetails) + .orElseThrow(() -> new UsernameNotFoundException("해당하는 유저를 찾을 수 없습니다.")); + } + + // 해당하는 User 의 데이터가 존재한다면 UserDetails 객체로 만들어서 리턴 + private UserDetails createUserDetails(Member member) { + return User.builder() + .username(member.getUsername()) + .password(passwordEncoder.encode(member.getPassword())) + .roles(member.getRoles().toArray(new String[0])) + .build(); + } + +} diff --git a/auth-service/src/main/java/kiz/app/service/LoginService.java b/auth-service/src/main/java/kiz/app/service/LoginService.java new file mode 100644 index 0000000..866546d --- /dev/null +++ b/auth-service/src/main/java/kiz/app/service/LoginService.java @@ -0,0 +1,37 @@ +package kiz.app.service; + +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Service; +// import org.springframework.transaction.annotation.Transactional; + +import kiz.app.dto.TokenInfo; +import kiz.app.provider.JwtTokenProvider; +import lombok.RequiredArgsConstructor; + +@Service +// @Transactional(readOnly = true) +@RequiredArgsConstructor +public class LoginService { + + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; + + // @Transactional + public TokenInfo login(String memberId, String password) { + // 1. Login ID/PW 를 기반으로 Authentication 객체 생성 + // 이때 authentication 는 인증 여부를 확인하는 authenticated 값이 false + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(memberId, password); + + // 2. 실제 검증 (사용자 비밀번호 체크)이 이루어지는 부분 + // authenticate 매서드가 실행될 때 CustomUserDetailsService 에서 만든 loadUserByUsername 메서드가 실행 + Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); + + // 3. 인증 정보를 기반으로 JWT 토큰 생성 + TokenInfo tokenInfo = jwtTokenProvider.generateToken(authentication); + + return tokenInfo; + } + +} diff --git a/auth-service/src/main/java/kiz/app/util/SecurityUtil.java b/auth-service/src/main/java/kiz/app/util/SecurityUtil.java new file mode 100644 index 0000000..f28d073 --- /dev/null +++ b/auth-service/src/main/java/kiz/app/util/SecurityUtil.java @@ -0,0 +1,14 @@ +package kiz.app.util; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; + +public class SecurityUtil { + public static String getCurrentMemberId() { + final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null || authentication.getName() == null) { + throw new RuntimeException("No authentication information."); + } + return authentication.getName(); + } +} diff --git a/auth-service/src/main/resources/application.yaml b/auth-service/src/main/resources/application.yaml new file mode 100644 index 0000000..71f03ed --- /dev/null +++ b/auth-service/src/main/resources/application.yaml @@ -0,0 +1,25 @@ +server: + port: 8082 +# servlet: +# contextPath: /auth + +spring: + config: + activate: + on-profile: local + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + shutdown: + enabled: true + +logging: + level: + kiz.app: DEBUG + +jwt: + secret: VlwEyVBsYt9V7zq57TejMnVUyzblYcfPQye08f7MGVA9XkHa diff --git a/auth-service/src/main/resources/bootstrap.yaml b/auth-service/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..e24e550 --- /dev/null +++ b/auth-service/src/main/resources/bootstrap.yaml @@ -0,0 +1,26 @@ +spring: + application: + name: auth-service # 서비스 ID (컨피그 클라이언트가 어떤 서비스를 조회하는지 매핑) + profiles: + active: local # 서비스가 실행할 기본 프로파일 +# cloud: +# config: +# uri: http://localhost:8889 # 컨피그 서버 위치 +# name: user +# profile: default + +eureka: + instance: + hostname: mindol.synology.me + lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초) + # 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면 + # 서비스 등록 해제 (디폴트 90초) + lease-expiration-duration-in-seconds: 90 + prefer-ip-address: false # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false) + client: + register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true) + fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true) + registry-fetch-interval-seconds: 30 # 서비스 목록을 설정한 시간마다 캐싱 (디폴트 30초) + disable-delta: true # 캐싱 시 변경된 부분만 업데이트할 지 여부 (디폴트 false) + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:8761/eureka/ \ No newline at end of file diff --git a/auth-service/src/test/java/kiz/app/AuthServiceApplicationTests.java b/auth-service/src/test/java/kiz/app/AuthServiceApplicationTests.java new file mode 100644 index 0000000..10eef9e --- /dev/null +++ b/auth-service/src/test/java/kiz/app/AuthServiceApplicationTests.java @@ -0,0 +1,13 @@ +package kiz.app; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AuthServiceApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/eureka-server b/eureka-server new file mode 160000 index 0000000..60a9184 --- /dev/null +++ b/eureka-server @@ -0,0 +1 @@ +Subproject commit 60a91841f8a07074daafd60c4b9a04092f80e412 diff --git a/gateway-server/.gitignore b/gateway-server/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/gateway-server/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/gateway-server/build.gradle b/gateway-server/build.gradle new file mode 100644 index 0000000..028ee8d --- /dev/null +++ b/gateway-server/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.6' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +group = 'kiz.app' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +ext { + set('springCloudVersion', "2021.0.5") +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-webflux' + implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' + implementation 'org.springframework.cloud:spring-cloud-starter-config' + implementation 'org.springframework.cloud:spring-cloud-starter-gateway' + implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' + implementation 'io.jsonwebtoken:jjwt-api:0.11.2' + runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2', 'io.jsonwebtoken:jjwt-jackson:0.11.2' + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'io.projectreactor:reactor-test' +} + +dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" + } +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gateway-server/gradle/wrapper/gradle-wrapper.jar b/gateway-server/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..249e583 Binary files /dev/null and b/gateway-server/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gateway-server/gradle/wrapper/gradle-wrapper.properties b/gateway-server/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ae04661 --- /dev/null +++ b/gateway-server/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gateway-server/gradlew b/gateway-server/gradlew new file mode 100644 index 0000000..a69d9cb --- /dev/null +++ b/gateway-server/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gateway-server/gradlew.bat b/gateway-server/gradlew.bat new file mode 100644 index 0000000..53a6b23 --- /dev/null +++ b/gateway-server/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gateway-server/settings.gradle b/gateway-server/settings.gradle new file mode 100644 index 0000000..e616058 --- /dev/null +++ b/gateway-server/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'gateway-server' diff --git a/gateway-server/src/main/java/kiz/app/GateWayServerApplication.java b/gateway-server/src/main/java/kiz/app/GateWayServerApplication.java new file mode 100644 index 0000000..391dfb4 --- /dev/null +++ b/gateway-server/src/main/java/kiz/app/GateWayServerApplication.java @@ -0,0 +1,15 @@ +package kiz.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@EnableDiscoveryClient +@SpringBootApplication +public class GateWayServerApplication { + + public static void main(String[] args) { + SpringApplication.run(GateWayServerApplication.class, args); + } + +} diff --git a/gateway-server/src/main/java/kiz/app/config/GatewayConfig.java b/gateway-server/src/main/java/kiz/app/config/GatewayConfig.java new file mode 100644 index 0000000..caf537e --- /dev/null +++ b/gateway-server/src/main/java/kiz/app/config/GatewayConfig.java @@ -0,0 +1,30 @@ +package kiz.app.config; + +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import kiz.app.filter.AuthenticationFilter; +import lombok.RequiredArgsConstructor; + +// @Configuration +// @EnableHystrix +@RequiredArgsConstructor +public class GatewayConfig { + + private final AuthenticationFilter filter; + + @Bean + public RouteLocator routes(RouteLocatorBuilder builder) { + return builder.routes() + .route("user-service", r -> r.path("/users/**") + .filters(f -> f.filter(filter)) + .uri("lb://user-service")) + .route("auth-service", r -> r.path("/auth/**") + .filters(f -> f.filter(filter)) + .uri("lb://auth-service")) + .build(); + } + +} diff --git a/gateway-server/src/main/java/kiz/app/filter/AuthenticationFilter.java b/gateway-server/src/main/java/kiz/app/filter/AuthenticationFilter.java new file mode 100644 index 0000000..0a5f913 --- /dev/null +++ b/gateway-server/src/main/java/kiz/app/filter/AuthenticationFilter.java @@ -0,0 +1,63 @@ +package kiz.app.filter; + +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; + +import io.jsonwebtoken.Claims; +import kiz.app.util.JwtTokenUtil; +import kiz.app.util.RouterValidator; +import lombok.RequiredArgsConstructor; +import reactor.core.publisher.Mono; + +@RefreshScope +@Component +@RequiredArgsConstructor +public class AuthenticationFilter implements GatewayFilter { + + private final RouterValidator routerValidator;//custom route validator + private final JwtTokenUtil jwtTokenUtil; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + if (routerValidator.isSecured.test(request)) { + if (this.isAuthMissing(request)) + return this.onError(exchange, "Authorization header is missing in request", HttpStatus.UNAUTHORIZED); + final String token = this.getAuthHeader(request); + if (jwtTokenUtil.isInvalid(token)) + return this.onError(exchange, "Authorization header is invalid", HttpStatus.UNAUTHORIZED); + this.populateRequestWithHeaders(exchange, token); + } + return chain.filter(exchange); + } + + /*PRIVATE*/ + private Mono onError(ServerWebExchange exchange, String err, HttpStatus httpStatus) { + ServerHttpResponse response = exchange.getResponse(); + response.setStatusCode(httpStatus); + return response.setComplete(); + } + + private String getAuthHeader(ServerHttpRequest request) { + return request.getHeaders().getOrEmpty("Authorization").get(0); + } + + private boolean isAuthMissing(ServerHttpRequest request) { + return !request.getHeaders().containsKey("Authorization"); + } + + private void populateRequestWithHeaders(ServerWebExchange exchange, String token) { + Claims claims = jwtTokenUtil.getAllClaimsFromToken(token); + exchange.getRequest().mutate() + .header("id", String.valueOf(claims.get("id"))) + .header("role", String.valueOf(claims.get("role"))) + .build(); + } + +} diff --git a/gateway-server/src/main/java/kiz/app/filter/GlobalFilter.java b/gateway-server/src/main/java/kiz/app/filter/GlobalFilter.java new file mode 100644 index 0000000..0b577da --- /dev/null +++ b/gateway-server/src/main/java/kiz/app/filter/GlobalFilter.java @@ -0,0 +1,53 @@ +package kiz.app.filter; + +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + +@Slf4j +@Component +public class GlobalFilter extends AbstractGatewayFilterFactory { + + public GlobalFilter(){ + super(Config.class); + } + + @Getter + public static class Config { + private String baseMessage; + private boolean preLogger; + private boolean postLogger; + } + + @Override + public GatewayFilter apply(Config config) { + return (exchange, chain) -> { + ServerHttpRequest request = exchange.getRequest(); // reactive포함된거로 import + ServerHttpResponse response = exchange.getResponse(); + + log.info("Global com.example.scg.filter baseMessgae: {}", config.getBaseMessage()); + + // Global pre Filter + if (config.isPreLogger()){ + log.info("Global Filter Start: request id -> {}" , request.getId()); + log.info("Global Filter Start: request path -> {}" , request.getPath()); + } + + // Global Post Filter + //Mono는 webflux에서 단일값 전송할때 Mono값으로 전송 + return chain.filter(exchange).then(Mono.fromRunnable(()->{ + if (config.isPostLogger()){ + log.info("Global Filter End: response statuscode -> {}" , response.getStatusCode()); + } + })); + + }; + } + +} diff --git a/gateway-server/src/main/java/kiz/app/util/JwtTokenUtil.java b/gateway-server/src/main/java/kiz/app/util/JwtTokenUtil.java new file mode 100644 index 0000000..dbd3745 --- /dev/null +++ b/gateway-server/src/main/java/kiz/app/util/JwtTokenUtil.java @@ -0,0 +1,40 @@ +package kiz.app.util; + +import java.security.Key; +import java.util.Date; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.security.Keys; + +@Component +public class JwtTokenUtil { + + @Value("${jwt.secret}") + private String secret; + + private Key key; + + @PostConstruct + public void init() { + this.key = Keys.hmacShaKeyFor(secret.getBytes()); + } + + public Claims getAllClaimsFromToken(String token) { + return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); + } + + private boolean isTokenExpired(String token) { + return this.getAllClaimsFromToken(token).getExpiration().before(new Date()); + } + + public boolean isInvalid(String token) { + return this.isTokenExpired(token); + } + +} diff --git a/gateway-server/src/main/java/kiz/app/util/RouterValidator.java b/gateway-server/src/main/java/kiz/app/util/RouterValidator.java new file mode 100644 index 0000000..c70d634 --- /dev/null +++ b/gateway-server/src/main/java/kiz/app/util/RouterValidator.java @@ -0,0 +1,22 @@ +package kiz.app.util; + +import java.util.List; +import java.util.function.Predicate; + +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; + +@Component +public class RouterValidator { + + public static final List openApiEndpoints = List.of( + "/auth/register", + "/auth/login" + ); + + public Predicate isSecured = + request -> openApiEndpoints + .stream() + .noneMatch(uri -> request.getURI().getPath().contains(uri)); + +} diff --git a/gateway-server/src/main/resources/application.yaml b/gateway-server/src/main/resources/application.yaml new file mode 100644 index 0000000..5101d8a --- /dev/null +++ b/gateway-server/src/main/resources/application.yaml @@ -0,0 +1,107 @@ +server: + port: 8081 +# servlet: +# contextPath: /gateway + +spring: + config: + activate: + on-profile: local + +cloud: + config: + name: bootstrap + gateway: + default-filters: + - name: GlobalFilter + args: + baseMessage: Spring Cloud Gateway Global Filter + preLogger: true + postLogger: true + globalcors: + cors-configurations: + '[/**]': + allowedOrigins: "http://mindol.synology.me:8081" + allowedMethods: + - GET + - POST + - DELETE + - PUT + - OPTIONS + - DELETE + - PATCH + allowedHeaders: '*' + allow-credentials: true + routes: + - id: order-service + uri: lb://ORDER-SERVICE + predicates: + - Path=/order-service/** + filters: + - AuthenticationFilter + - RewritePath=/order-service/(?.*),/$\{segment} + - name: RequestRateLimiter + args: + redis-rate-limiter.replenishRate: 3 + redis-rate-limiter.burstCapacity: 3 + key-resolver: "#{@tokenKeyResolver}" + + - id: store-service + uri: lb://STORE-SERVICE + predicates: + - Path=/store-service/** + filters: + - AuthenticationFilter + - RewritePath=/store-service/(?.*),/$\{segment} + - name: RequestRateLimiter + args: + redis-rate-limiter.replenishRate: 3 + redis-rate-limiter.burstCapacity: 3 + key-resolver: "#{@tokenKeyResolver}" + + - id: notice-service + uri: lb://NOTICE-SERVICE + predicates: + - Path=/notice/** + filters: + - AuthenticationFilter + - RewritePath=/notice/(?.*),/$\{segment} + + - id: auth-service + uri: lb://AUTH-SERVICE + predicates: + - Path=/auth/login + - Method=POST + filters: + - RewritePath=/auth/(?.*),/$\{segment} + - id: auth-service + uri: lb://AUTH-SERVICE + predicates: + - Path=/auth/logout + - Method=POST + filters: + - RewritePath=/auth/(?.*),/$\{segment} + + - id: member-service + uri: lb://MEMBER-SERVICE + predicates: + - Path=/member/** + filters: + - AuthenticationFilter + - RewritePath=/member/(?.*),/$\{segment} + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + shutdown: + enabled: true + +logging: + level: + kiz.app: DEBUG + +jwt: + secret: VlwEyVBsYt9V7zq57TejMnVUyzblYcfPQye08f7MGVA9XkHa \ No newline at end of file diff --git a/gateway-server/src/main/resources/bootstrap.yaml b/gateway-server/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..672e519 --- /dev/null +++ b/gateway-server/src/main/resources/bootstrap.yaml @@ -0,0 +1,26 @@ +spring: + application: + name: gateway-service # 서비스 ID (컨피그 클라이언트가 어떤 서비스를 조회하는지 매핑) + profiles: + active: local # 서비스가 실행할 기본 프로파일 +# cloud: +# config: +# uri: http://localhost:8889 # 컨피그 서버 위치 +# name: user +# profile: default + +eureka: + instance: + hostname: mindol.synology.me + lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초) + # 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면 + # 서비스 등록 해제 (디폴트 90초) + lease-expiration-duration-in-seconds: 90 + prefer-ip-address: false # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false) + client: + register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true) + fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true) + registry-fetch-interval-seconds: 30 # 서비스 목록을 설정한 시간마다 캐싱 (디폴트 30초) + disable-delta: true # 캐싱 시 변경된 부분만 업데이트할 지 여부 (디폴트 false) + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:8761/eureka/ \ No newline at end of file diff --git a/gateway-server/src/test/java/kiz/app/GatewayServerApplicationTests.java b/gateway-server/src/test/java/kiz/app/GatewayServerApplicationTests.java new file mode 100644 index 0000000..8d95fc9 --- /dev/null +++ b/gateway-server/src/test/java/kiz/app/GatewayServerApplicationTests.java @@ -0,0 +1,13 @@ +package kiz.app; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class GatewayServerApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/member-service/.gitignore b/member-service/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/member-service/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/member-service/build.gradle b/member-service/build.gradle new file mode 100644 index 0000000..846284c --- /dev/null +++ b/member-service/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.6' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +group = 'kiz.space' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +ext { + set('springCloudVersion', "2021.0.5") +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' + implementation 'org.springframework.cloud:spring-cloud-starter-config' + implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' + implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + runtimeOnly 'com.h2database:h2' + runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' + annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" + } +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/member-service/gradle/wrapper/gradle-wrapper.jar b/member-service/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..249e583 Binary files /dev/null and b/member-service/gradle/wrapper/gradle-wrapper.jar differ diff --git a/member-service/gradle/wrapper/gradle-wrapper.properties b/member-service/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ae04661 --- /dev/null +++ b/member-service/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/member-service/gradlew b/member-service/gradlew new file mode 100644 index 0000000..a69d9cb --- /dev/null +++ b/member-service/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/member-service/gradlew.bat b/member-service/gradlew.bat new file mode 100644 index 0000000..53a6b23 --- /dev/null +++ b/member-service/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/member-service/settings.gradle b/member-service/settings.gradle new file mode 100644 index 0000000..c882d85 --- /dev/null +++ b/member-service/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'member-service' diff --git a/member-service/src/main/java/kiz/app/common/PersistenceAdapter.java b/member-service/src/main/java/kiz/app/common/PersistenceAdapter.java new file mode 100644 index 0000000..6c43fc6 --- /dev/null +++ b/member-service/src/main/java/kiz/app/common/PersistenceAdapter.java @@ -0,0 +1,26 @@ +package kiz.app.common; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface PersistenceAdapter { + + /** + * The value may indicate a suggestion for a logical component name, + * to be turned into a Spring bean in case of an autodetected component. + * @return the suggested component name, if any (or empty String otherwise) + */ + @AliasFor(annotation = Component.class) + String value() default ""; + +} diff --git a/member-service/src/main/java/kiz/app/common/SelfValidating.java b/member-service/src/main/java/kiz/app/common/SelfValidating.java new file mode 100644 index 0000000..e208d28 --- /dev/null +++ b/member-service/src/main/java/kiz/app/common/SelfValidating.java @@ -0,0 +1,31 @@ +package kiz.app.common; + +import java.util.Set; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validation; +import javax.validation.ValidatorFactory; +import javax.validation.Validator; + +public abstract class SelfValidating { + + private Validator validator; + private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + + public SelfValidating() { + validator = factory.getValidator(); + } + + /** + * Evaluates all Bean Validations on the attributes of this + * instance. + */ + protected void validateSelf() { + Set> violations = validator.validate((T) this); + if (!violations.isEmpty()) { + throw new ConstraintViolationException(violations); + } + } + +} diff --git a/member-service/src/main/java/kiz/app/common/UseCase.java b/member-service/src/main/java/kiz/app/common/UseCase.java new file mode 100644 index 0000000..6c51534 --- /dev/null +++ b/member-service/src/main/java/kiz/app/common/UseCase.java @@ -0,0 +1,26 @@ +package kiz.app.common; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface UseCase { + + /** + * The value may indicate a suggestion for a logical component name, + * to be turned into a Spring bean in case of an autodetected component. + * @return the suggested component name, if any (or empty String otherwise) + */ + @AliasFor(annotation = Component.class) + String value() default ""; + +} diff --git a/member-service/src/main/java/kiz/app/common/WebAdapter.java b/member-service/src/main/java/kiz/app/common/WebAdapter.java new file mode 100644 index 0000000..2bcedd4 --- /dev/null +++ b/member-service/src/main/java/kiz/app/common/WebAdapter.java @@ -0,0 +1,26 @@ +package kiz.app.common; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface WebAdapter { + + /** + * The value may indicate a suggestion for a logical component name, + * to be turned into a Spring bean in case of an autodetected component. + * @return the suggested component name, if any (or empty String otherwise) + */ + @AliasFor(annotation = Component.class) + String value() default ""; + +} diff --git a/member-service/src/main/java/kiz/app/member/MemberApplication.java b/member-service/src/main/java/kiz/app/member/MemberApplication.java new file mode 100644 index 0000000..9a24d71 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/MemberApplication.java @@ -0,0 +1,15 @@ +package kiz.app.member; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class MemberApplication { + + public static void main(String[] args) { + SpringApplication.run(MemberApplication.class, args); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/in/web/FindMemberController.java b/member-service/src/main/java/kiz/app/member/adapter/in/web/FindMemberController.java new file mode 100644 index 0000000..f5f1700 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/in/web/FindMemberController.java @@ -0,0 +1,26 @@ +package kiz.app.member.adapter.in.web; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import kiz.app.common.WebAdapter; +import kiz.app.member.adapter.in.web.dto.MemberResponse; +import kiz.app.member.adapter.in.web.mapper.MemberWebMapper; +import kiz.app.member.application.port.in.FindMemberUseCase; +import lombok.RequiredArgsConstructor; + +@WebAdapter +@RestController +@RequiredArgsConstructor +public class FindMemberController { + + private final FindMemberUseCase findMemberUseCase; + private final MemberWebMapper memberWebMapper; + + @GetMapping("/api/member/{memberId}") + public MemberResponse getMember(@PathVariable("memberId") String memberId) { + return memberWebMapper.toDto(findMemberUseCase.getMember(memberId)); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/in/web/SignUpController.java b/member-service/src/main/java/kiz/app/member/adapter/in/web/SignUpController.java new file mode 100644 index 0000000..83665f4 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/in/web/SignUpController.java @@ -0,0 +1,5 @@ +package kiz.app.member.adapter.in.web; + +public class SignUpController { + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/in/web/dto/MemberResponse.java b/member-service/src/main/java/kiz/app/member/adapter/in/web/dto/MemberResponse.java new file mode 100644 index 0000000..4acd7fc --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/in/web/dto/MemberResponse.java @@ -0,0 +1,27 @@ +package kiz.app.member.adapter.in.web.dto; + +import java.time.LocalDate; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class MemberResponse { + private String memberId; + private String name; + private String email; + private String phone; + private String address; + private LocalDate birthday; + + @Builder + public MemberResponse(String memberId, String name, String email, String phone, String address, + LocalDate birthday) { + this.memberId = memberId; + this.name = name; + this.email = email; + this.phone = phone; + this.address = address; + this.birthday = birthday; + } +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/in/web/mapper/MemberWebMapper.java b/member-service/src/main/java/kiz/app/member/adapter/in/web/mapper/MemberWebMapper.java new file mode 100644 index 0000000..c35fa0c --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/in/web/mapper/MemberWebMapper.java @@ -0,0 +1,22 @@ +package kiz.app.member.adapter.in.web.mapper; + +import org.springframework.stereotype.Component; + +import kiz.app.member.adapter.in.web.dto.MemberResponse; +import kiz.app.member.domain.Member; + +@Component +public class MemberWebMapper { + + public MemberResponse toDto(Member member) { + return MemberResponse.builder() + .memberId(member.getMemberId()) + .name(member.getName()) + .email(member.getEmail()) + .phone(member.getPhone()) + .address(member.getAddress()) + .birthday(member.getBirthday()) + .build(); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/out/persistence/MemberEntity.java b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/MemberEntity.java new file mode 100644 index 0000000..3f405bf --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/MemberEntity.java @@ -0,0 +1,46 @@ +package kiz.app.member.adapter.out.persistence; + +import java.time.LocalDate; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@Entity +@Table(name = "member") +public class MemberEntity { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "member_id", length = 20, nullable = false, unique = true) + private String memberId; + + @Column(name = "password", length = 50, nullable = false) + private String password; + + @Column(name = "name", length = 20, nullable = false) + private String name; + + @Column(name = "email", length = 50, nullable = false) + private String email; + + @Column(name = "phone", length = 20) + private String phone; + + @Column(name = "address", length = 100) + private String address; + + @Column(name = "birthday") + private LocalDate birthday; + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/out/persistence/MemberPersistenceAdapter.java b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/MemberPersistenceAdapter.java new file mode 100644 index 0000000..cec01ea --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/MemberPersistenceAdapter.java @@ -0,0 +1,27 @@ +package kiz.app.member.adapter.out.persistence; + +import javax.persistence.EntityNotFoundException; + +import kiz.app.common.PersistenceAdapter; +import kiz.app.member.adapter.out.persistence.mapper.MemberMapper; +import kiz.app.member.adapter.out.persistence.repository.MemberJpaRepository; +import kiz.app.member.application.port.out.FindMemberPort; +import kiz.app.member.domain.Member; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@PersistenceAdapter +public class MemberPersistenceAdapter implements FindMemberPort { + + private final MemberJpaRepository memberJpaRepository; + private final MemberMapper memberMapper; + + @Override + public Member findByMemberId(String memberId) { + return memberMapper.toDomain( + memberJpaRepository.findByMemberId(memberId) + .orElseThrow(EntityNotFoundException::new) + ); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/out/persistence/mapper/MemberMapper.java b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/mapper/MemberMapper.java new file mode 100644 index 0000000..2ddd30f --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/mapper/MemberMapper.java @@ -0,0 +1,23 @@ +package kiz.app.member.adapter.out.persistence.mapper; + +import org.springframework.stereotype.Component; + +import kiz.app.member.adapter.out.persistence.MemberEntity; +import kiz.app.member.domain.Member; + +@Component +public class MemberMapper { + + public Member toDomain(MemberEntity member) { + return Member.builder() + .memberId(member.getMemberId()) + .password(member.getPassword()) + .name(member.getName()) + .email(member.getEmail()) + .phone(member.getPhone()) + .address(member.getAddress()) + .birthday(member.getBirthday()) + .build(); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/adapter/out/persistence/repository/MemberJpaRepository.java b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/repository/MemberJpaRepository.java new file mode 100644 index 0000000..d7cb94b --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/adapter/out/persistence/repository/MemberJpaRepository.java @@ -0,0 +1,13 @@ +package kiz.app.member.adapter.out.persistence.repository; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import kiz.app.member.adapter.out.persistence.MemberEntity; + +public interface MemberJpaRepository extends JpaRepository { + + Optional findByMemberId(String memberId); + +} diff --git a/member-service/src/main/java/kiz/app/member/application/port/in/FindMemberUseCase.java b/member-service/src/main/java/kiz/app/member/application/port/in/FindMemberUseCase.java new file mode 100644 index 0000000..ab0837f --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/application/port/in/FindMemberUseCase.java @@ -0,0 +1,9 @@ +package kiz.app.member.application.port.in; + +import kiz.app.member.domain.Member; + +public interface FindMemberUseCase { + + Member getMember(String memberId); + +} diff --git a/member-service/src/main/java/kiz/app/member/application/port/in/LoginUseCase.java b/member-service/src/main/java/kiz/app/member/application/port/in/LoginUseCase.java new file mode 100644 index 0000000..c78f850 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/application/port/in/LoginUseCase.java @@ -0,0 +1,5 @@ +package kiz.app.member.application.port.in; + +public interface LoginUseCase { + +} diff --git a/member-service/src/main/java/kiz/app/member/application/port/in/command/LoginCommand.java b/member-service/src/main/java/kiz/app/member/application/port/in/command/LoginCommand.java new file mode 100644 index 0000000..aee85bb --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/application/port/in/command/LoginCommand.java @@ -0,0 +1,24 @@ +package kiz.app.member.application.port.in.command; + +import javax.validation.constraints.NotNull; + +import kiz.app.common.SelfValidating; +import lombok.EqualsAndHashCode; +import lombok.Value; + +@Value +@EqualsAndHashCode(callSuper = false) +public class LoginCommand extends SelfValidating { + + @NotNull + private final String memberId; + @NotNull + private final String password; + + public LoginCommand(String memberId, String password) { + this.memberId = memberId; + this.password = password; + this.validateSelf(); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/application/port/out/FindMemberPort.java b/member-service/src/main/java/kiz/app/member/application/port/out/FindMemberPort.java new file mode 100644 index 0000000..d20f853 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/application/port/out/FindMemberPort.java @@ -0,0 +1,9 @@ +package kiz.app.member.application.port.out; + +import kiz.app.member.domain.Member; + +public interface FindMemberPort { + + Member findByMemberId(String memberId); + +} diff --git a/member-service/src/main/java/kiz/app/member/application/service/FindMemberService.java b/member-service/src/main/java/kiz/app/member/application/service/FindMemberService.java new file mode 100644 index 0000000..88cfb98 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/application/service/FindMemberService.java @@ -0,0 +1,20 @@ +package kiz.app.member.application.service; + +import kiz.app.common.UseCase; +import kiz.app.member.application.port.in.FindMemberUseCase; +import kiz.app.member.application.port.out.FindMemberPort; +import kiz.app.member.domain.Member; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@UseCase +public class FindMemberService implements FindMemberUseCase { + + private final FindMemberPort findMemberPort; + + @Override + public Member getMember(String memberId) { + return findMemberPort.findByMemberId(memberId); + } + +} diff --git a/member-service/src/main/java/kiz/app/member/application/service/LoginService.java b/member-service/src/main/java/kiz/app/member/application/service/LoginService.java new file mode 100644 index 0000000..d3a0e31 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/application/service/LoginService.java @@ -0,0 +1,5 @@ +package kiz.app.member.application.service; + +public class LoginService { + +} diff --git a/member-service/src/main/java/kiz/app/member/domain/Member.java b/member-service/src/main/java/kiz/app/member/domain/Member.java new file mode 100644 index 0000000..993c201 --- /dev/null +++ b/member-service/src/main/java/kiz/app/member/domain/Member.java @@ -0,0 +1,48 @@ +package kiz.app.member.domain; + +import java.time.LocalDate; +import java.util.Optional; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Value; + +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class Member { + + private final MemberId id; + + @Getter + private final String memberId; + + @Getter + private final String password; + + @Getter + private final String name; + + @Getter + private final String email; + + @Getter + private final String phone; + + @Getter + private final String address; + + @Getter + private final LocalDate birthday; + + public Optional getId(){ + return Optional.ofNullable(this.id); + } + + @Value + public static class MemberId { + private Long value; + } + +} diff --git a/member-service/src/main/resources/application.yaml b/member-service/src/main/resources/application.yaml new file mode 100644 index 0000000..0198a7a --- /dev/null +++ b/member-service/src/main/resources/application.yaml @@ -0,0 +1,43 @@ +server: + port: 8083 +# servlet: +# contextPath: /member + +spring: + config: + activate: + on-profile: local + h2: + console: + enabled: true + path: /h2-console + settings: + web-allow-others: true + datasource: + driver-class-name: org.h2.Driver + url: jdbc:h2:mem:userdb;DB_CLOSE_DELAY=-1 + username: sa + password: + jpa: + hibernate: # hibernate 사용 설정 + # 애플리케이션 실행 시점에 테이블을 다 지우고, 내가 가진 entity 정보를 보고 다시 테이블 자동 생성 + # if exists drop table 해주고 다시 만들어준다고 보면 된다. + ddl-auto: create + properties: # property 사용 설정 + hibernate: # hibernate property 설정 + format_sql: true + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + shutdown: + enabled: true + +logging: + level: + kiz.app: DEBUG + org.hibernate.SQL: debug + org.hibernate.type: trace # 실제 들어가는 파라미터값 찍어주는 설정 \ No newline at end of file diff --git a/member-service/src/main/resources/bootstrap.yaml b/member-service/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..fc16b5b --- /dev/null +++ b/member-service/src/main/resources/bootstrap.yaml @@ -0,0 +1,26 @@ +spring: + application: + name: member-service # 서비스 ID (컨피그 클라이언트가 어떤 서비스를 조회하는지 매핑) + profiles: + active: local # 서비스가 실행할 기본 프로파일 +# cloud: +# config: +# uri: http://localhost:8889 # 컨피그 서버 위치 +# name: user +# profile: default + +eureka: + instance: + hostname: mindol.synology.me + lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초) + # 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면 + # 서비스 등록 해제 (디폴트 90초) + lease-expiration-duration-in-seconds: 90 + prefer-ip-address: false # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false) + client: + register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true) + fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true) + registry-fetch-interval-seconds: 30 # 서비스 목록을 설정한 시간마다 캐싱 (디폴트 30초) + disable-delta: true # 캐싱 시 변경된 부분만 업데이트할 지 여부 (디폴트 false) + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:8761/eureka/ \ No newline at end of file diff --git a/member-service/src/test/java/kiz/space/kiz/KizApplicationTests.java b/member-service/src/test/java/kiz/space/kiz/KizApplicationTests.java new file mode 100644 index 0000000..a9e8559 --- /dev/null +++ b/member-service/src/test/java/kiz/space/kiz/KizApplicationTests.java @@ -0,0 +1,13 @@ +package kiz.space.kiz; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class KizApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/member-service/zulu-repo_1.0.0-3_all.deb b/member-service/zulu-repo_1.0.0-3_all.deb new file mode 100644 index 0000000..22ac232 Binary files /dev/null and b/member-service/zulu-repo_1.0.0-3_all.deb differ diff --git a/order-service/.gitignore b/order-service/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/order-service/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/order-service/build.gradle b/order-service/build.gradle new file mode 100644 index 0000000..49ae453 --- /dev/null +++ b/order-service/build.gradle @@ -0,0 +1,43 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.6' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +group = 'kiz.app' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +ext { + set('springCloudVersion', "2021.0.5") +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" + } +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/order-service/gradle/wrapper/gradle-wrapper.jar b/order-service/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..249e583 Binary files /dev/null and b/order-service/gradle/wrapper/gradle-wrapper.jar differ diff --git a/order-service/gradle/wrapper/gradle-wrapper.properties b/order-service/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ae04661 --- /dev/null +++ b/order-service/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/order-service/gradlew b/order-service/gradlew new file mode 100644 index 0000000..a69d9cb --- /dev/null +++ b/order-service/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/order-service/gradlew.bat b/order-service/gradlew.bat new file mode 100644 index 0000000..53a6b23 --- /dev/null +++ b/order-service/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/order-service/hs_err_pid1099.log b/order-service/hs_err_pid1099.log new file mode 100644 index 0000000..2c9d6a1 --- /dev/null +++ b/order-service/hs_err_pid1099.log @@ -0,0 +1,1455 @@ +# +# There is insufficient memory for the Java Runtime Environment to continue. +# Native memory allocation (mmap) failed to map 624951296 bytes for committing reserved memory. +# Possible reasons: +# The system is out of physical RAM or swap space +# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap +# Possible solutions: +# Reduce memory load on the system +# Increase physical memory or swap space +# Check if swap backing store is full +# Decrease Java heap size (-Xmx/-Xms) +# Decrease number of Java threads +# Decrease Java thread stack sizes (-Xss) +# Set larger code cache with -XX:ReservedCodeCacheSize= +# JVM is running with Unscaled Compressed Oops mode in which the Java heap is +# placed in the first 4GB address space. The Java Heap base address is the +# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress +# to set the Java Heap base and to place the Java Heap above 4GB virtual address. +# This output file may be truncated or incomplete. +# +# Out of Memory Error (os_linux.cpp:2787), pid=1099, tid=1235 +# +# JRE version: OpenJDK Runtime Environment Temurin-17.0.5+8 (17.0.5+8) (build 17.0.5+8) +# Java VM: OpenJDK 64-Bit Server VM Temurin-17.0.5+8 (17.0.5+8, mixed mode, emulated-client, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Core dump will be written. Default location: Core dumps may be processed with "/usr/syno/sbin/syno-dump-core.sh /volume1 %p %s" (or dumping to /home/coder/projects/kiz-space/order-service/core.1099) +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dsts.lsp.client=vscode -Dsts.log.file=/dev/null -XX:TieredStopAtLevel=1 -Xlog:jni+resolve=off -Dspring.config.location=file:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/classes/application.properties org.springframework.ide.vscode.boot.app.BootLanguageServerBootApp + +Host: Intel(R) Celeron(R) CPU J3455 @ 1.50GHz, 4 cores, 7G, Debian GNU/Linux 11 (bullseye) +Time: Thu Dec 15 16:39:01 2022 KST elapsed time: 116.810700 seconds (0d 0h 1m 56s) + +--------------- T H R E A D --------------- + +Current thread (0x00007fe2cc170b60): VMThread "VM Thread" [stack: 0x00007fe2b4f00000,0x00007fe2b5000000] [id=1235] + +Stack: [0x00007fe2b4f00000,0x00007fe2b5000000], sp=0x00007fe2b4ffdda0, free space=1015k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +V [libjvm.so+0xed9801] VMError::report_and_die(int, char const*, char const*, __va_list_tag*, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x1a1 +V [libjvm.so+0xeda3cd] VMError::report_and_die(Thread*, char const*, int, unsigned long, VMErrorType, char const*, __va_list_tag*)+0x2d +V [libjvm.so+0x605913] report_vm_out_of_memory(char const*, int, unsigned long, VMErrorType, char const*, ...)+0xc3 +V [libjvm.so+0xc14b28] os::pd_commit_memory_or_exit(char*, unsigned long, unsigned long, bool, char const*)+0xd8 +V [libjvm.so+0xc0dddd] os::commit_memory_or_exit(char*, unsigned long, unsigned long, bool, char const*)+0x1d +V [libjvm.so+0x7308de] G1PageBasedVirtualSpace::commit(unsigned long, unsigned long)+0x18e +V [libjvm.so+0x745141] G1RegionsLargerThanCommitSizeMapper::commit_regions(unsigned int, unsigned long, WorkGang*)+0x1a1 +V [libjvm.so+0x7d5ae8] HeapRegionManager::commit_regions(unsigned int, unsigned long, WorkGang*)+0x58 +V [libjvm.so+0x7d6ef5] HeapRegionManager::expand(unsigned int, unsigned int, WorkGang*)+0x35 +V [libjvm.so+0x7d710e] HeapRegionManager::expand_by(unsigned int, WorkGang*)+0x7e +V [libjvm.so+0x6eb1ef] G1CollectedHeap::expand(unsigned long, WorkGang*, double*)+0xef +V [libjvm.so+0x6ef442] G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)+0x9d2 +V [libjvm.so+0x6ef531] G1CollectedHeap::do_collection_pause_at_safepoint(double)+0x31 +V [libjvm.so+0x768e67] VM_G1CollectForAllocation::doit()+0x47 +V [libjvm.so+0xeded2a] VM_Operation::evaluate()+0xea +V [libjvm.so+0xee06d3] VMThread::evaluate_operation(VM_Operation*)+0x103 +V [libjvm.so+0xee0c24] VMThread::inner_execute(VM_Operation*)+0x1d4 +V [libjvm.so+0xee0f0f] VMThread::run()+0xbf +V [libjvm.so+0xe5d5b0] Thread::call_run()+0xc0 +V [libjvm.so+0xc17381] thread_native_entry(Thread*)+0xe1 + +VM_Operation (0x00007fe27d5f3af0): G1CollectForAllocation, mode: safepoint, requested by thread 0x00007fe2440047d0 + + +--------------- P R O C E S S --------------- + +Threads class SMR info: +_java_thread_list=0x00007fe26c0ff0b0, length=30, elements={ +0x00007fe2cc180650, 0x00007fe2cc181bf0, 0x00007fe2cc1a3010, 0x00007fe2cc1a6920, +0x00007fe2cc1a78e0, 0x00007fe2cc1a8e10, 0x00007fe2cc1aa240, 0x00007fe2cc22e5e0, +0x00007fe2cc237750, 0x00007fe2ccdce0a0, 0x00007fe2ccff9270, 0x00007fe2cd00a500, +0x00007fe2cc02b420, 0x00007fe260027240, 0x00007fe2540308d0, 0x00007fe258046790, +0x00007fe254045880, 0x00007fe25404eae0, 0x00007fe25404f910, 0x00007fe254050d00, +0x00007fe2540568a0, 0x00007fe250000e70, 0x00005621b0a4bb10, 0x00007fe244003a30, +0x00007fe2440047d0, 0x00007fe2440059b0, 0x00007fe2440069b0, 0x00007fe244007da0, +0x00007fe244009190, 0x00007fe24400a190 +} + +Java Threads: ( => current thread ) + 0x00007fe2cc180650 JavaThread "Reference Handler" daemon [_thread_blocked, id=1247, stack(0x00007fe2b4dfd000,0x00007fe2b4efe000)] + 0x00007fe2cc181bf0 JavaThread "Finalizer" daemon [_thread_blocked, id=1248, stack(0x00007fe2b4cfc000,0x00007fe2b4dfd000)] + 0x00007fe2cc1a3010 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=1261, stack(0x00007fe2b4914000,0x00007fe2b4a15000)] + 0x00007fe2cc1a6920 JavaThread "Service Thread" daemon [_thread_blocked, id=1264, stack(0x00007fe2b4813000,0x00007fe2b4914000)] + 0x00007fe2cc1a78e0 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=1266, stack(0x00007fe2b4712000,0x00007fe2b4813000)] + 0x00007fe2cc1a8e10 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=1269, stack(0x00007fe2b4611000,0x00007fe2b4712000)] + 0x00007fe2cc1aa240 JavaThread "Sweeper thread" daemon [_thread_blocked, id=1271, stack(0x00007fe2b4510000,0x00007fe2b4611000)] + 0x00007fe2cc22e5e0 JavaThread "Notification Thread" daemon [_thread_blocked, id=1295, stack(0x00007fe2b430e000,0x00007fe2b440f000)] + 0x00007fe2cc237750 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=1299, stack(0x00007fe2b410b000,0x00007fe2b420c000)] + 0x00007fe2ccdce0a0 JavaThread "boundedElastic-evictor-1" daemon [_thread_blocked, id=2237, stack(0x00007fe27f2ff000,0x00007fe27f400000)] + 0x00007fe2ccff9270 JavaThread "pool-11-thread-1" [_thread_blocked, id=2261, stack(0x00007fe27f1fe000,0x00007fe27f2ff000)] + 0x00007fe2cd00a500 JavaThread "LanguageServerApp-lifecycle" [_thread_blocked, id=2264, stack(0x00007fe27f0fd000,0x00007fe27f1fe000)] + 0x00007fe2cc02b420 JavaThread "DestroyJavaVM" [_thread_blocked, id=1214, stack(0x00007fe2d2cbb000,0x00007fe2d2dbc000)] + 0x00007fe260027240 JavaThread "pool-12-thread-1" [_thread_blocked, id=2266, stack(0x00007fe27deff000,0x00007fe27e000000)] + 0x00007fe2540308d0 JavaThread "Simple-Language-Server main thread" daemon [_thread_blocked, id=2348, stack(0x00007fe27ddfe000,0x00007fe27deff000)] + 0x00007fe258046790 JavaThread "parallel-1" daemon [_thread_blocked, id=2349, stack(0x00007fe27dcfd000,0x00007fe27ddfe000)] + 0x00007fe254045880 JavaThread "pool-8-thread-1" [_thread_blocked, id=2511, stack(0x00007fe27fdfd000,0x00007fe27fefe000)] + 0x00007fe25404eae0 JavaThread "parallel-2" daemon [_thread_blocked, id=2512, stack(0x00007fe27dbfc000,0x00007fe27dcfd000)] + 0x00007fe25404f910 JavaThread "parallel-3" daemon [_thread_blocked, id=2513, stack(0x00007fe27dafb000,0x00007fe27dbfc000)] + 0x00007fe254050d00 JavaThread "parallel-4" daemon [_thread_blocked, id=2514, stack(0x00007fe27d9fa000,0x00007fe27dafb000)] + 0x00007fe2540568a0 JavaThread "ForkJoinPool.commonPool-worker-1" daemon [_thread_blocked, id=2515, stack(0x00007fe27d8f9000,0x00007fe27d9fa000)] + 0x00007fe250000e70 JavaThread "Reconciler-1" daemon [_thread_blocked, id=2516, stack(0x00007fe27d7f8000,0x00007fe27d8f9000)] + 0x00005621b0a4bb10 JavaThread "ClassGraph-worker-0" daemon [_thread_blocked, id=2517, stack(0x00007fe27d6f7000,0x00007fe27d7f8000)] + 0x00007fe244003a30 JavaThread "ClassGraph-worker-1" daemon [_thread_blocked, id=2518, stack(0x00007fe27d5f6000,0x00007fe27d6f7000)] + 0x00007fe2440047d0 JavaThread "ClassGraph-worker-2" daemon [_thread_blocked, id=2519, stack(0x00007fe27d4f5000,0x00007fe27d5f6000)] + 0x00007fe2440059b0 JavaThread "ClassGraph-worker-3" daemon [_thread_blocked, id=2520, stack(0x00007fe27d3f4000,0x00007fe27d4f5000)] + 0x00007fe2440069b0 JavaThread "ClassGraph-worker-4" daemon [_thread_blocked, id=2521, stack(0x00007fe27d2f3000,0x00007fe27d3f4000)] + 0x00007fe244007da0 JavaThread "ClassGraph-worker-5" daemon [_thread_blocked, id=2522, stack(0x00007fe27d1f2000,0x00007fe27d2f3000)] + 0x00007fe244009190 JavaThread "ClassGraph-worker-6" daemon [_thread_blocked, id=2523, stack(0x00007fe27d0f1000,0x00007fe27d1f2000)] + 0x00007fe24400a190 JavaThread "ClassGraph-worker-7" daemon [_thread_blocked, id=2524, stack(0x00007fe27cff0000,0x00007fe27d0f1000)] + +Other Threads: +=>0x00007fe2cc170b60 VMThread "VM Thread" [stack: 0x00007fe2b4f00000,0x00007fe2b5000000] [id=1235] + 0x00007fe2cc135f30 WatcherThread [stack: 0x00007fe2b420e000,0x00007fe2b430e000] [id=1296] + 0x00007fe2cc0838d0 GCTaskThread "GC Thread#0" [stack: 0x00007fe2c422c000,0x00007fe2c432c000] [id=1223] + 0x00007fe2ac005040 GCTaskThread "GC Thread#1" [stack: 0x00007fe2b400b000,0x00007fe2b410b000] [id=1948] + 0x00007fe2ac00af20 GCTaskThread "GC Thread#2" [stack: 0x00007fe27ff00000,0x00007fe280000000] [id=1954] + 0x00007fe2ac00a8d0 GCTaskThread "GC Thread#3" [stack: 0x00007fe27fcfd000,0x00007fe27fdfd000] [id=2021] + 0x00007fe2cc094240 ConcurrentGCThread "G1 Main Marker" [stack: 0x00007fe2c412a000,0x00007fe2c422a000] [id=1224] + 0x00007fe2cc095130 ConcurrentGCThread "G1 Conc#0" [stack: 0x00007fe2c4028000,0x00007fe2c4128000] [id=1227] + 0x00007fe2cc0f8270 ConcurrentGCThread "G1 Refine#0" [stack: 0x00007fe2b5afc000,0x00007fe2b5bfc000] [id=1228] + 0x00007fe2b0002b60 ConcurrentGCThread "G1 Refine#1" [stack: 0x00007fe27cef0000,0x00007fe27cff0000] [id=2531] + 0x00007fe26400f7a0 ConcurrentGCThread "G1 Refine#2" [stack: 0x00007fe27cdee000,0x00007fe27ceee000] [id=2532] + 0x00007fe270060680 ConcurrentGCThread "G1 Refine#3" [stack: 0x00007fe27ccec000,0x00007fe27cdec000] [id=2558] + 0x00007fe2cc0f90f0 ConcurrentGCThread "G1 Service" [stack: 0x00007fe2b59fa000,0x00007fe2b5afa000] [id=1229] + +Threads with active compile tasks: + +VM state: at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) +[0x00007fe2cc027f70] Threads_lock - owner thread: 0x00007fe2cc170b60 +[0x00007fe2cc028720] Heap_lock - owner thread: 0x00007fe2440047d0 + +Heap address: 0x0000000086000000, size: 1952 MB, Compressed Oops mode: 32-bit + +CDS archive(s) not mapped +Compressed class space mapped at: 0x0000000100000000-0x0000000140000000, reserved size: 1073741824 +Narrow klass base: 0x0000000000000000, Narrow klass shift: 3, Narrow klass range: 0x140000000 + +GC Precious Log: + CPUs: 4 total, 4 available + Memory: 7802M + Large Page Support: Disabled + NUMA Support: Disabled + Compressed Oops: Enabled (32-bit) + Heap Region Size: 1M + Heap Min Capacity: 8M + Heap Initial Capacity: 122M + Heap Max Capacity: 1952M + Pre-touch: Disabled + Parallel Workers: 4 + Concurrent Workers: 1 + Concurrent Refinement Workers: 4 + Periodic GC: Disabled + +Heap: + garbage-first heap total 474112K, used 118376K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 2 young (2048K), 2 survivors (2048K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K + +Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) +| 0|0x0000000086000000, 0x0000000086100000, 0x0000000086100000|100%| O| |TAMS 0x0000000086100000, 0x0000000086000000| Untracked +| 1|0x0000000086100000, 0x0000000086200000, 0x0000000086200000|100%| O| |TAMS 0x0000000086200000, 0x0000000086100000| Untracked +| 2|0x0000000086200000, 0x0000000086300000, 0x0000000086300000|100%| O| |TAMS 0x0000000086300000, 0x0000000086200000| Untracked +| 3|0x0000000086300000, 0x0000000086400000, 0x0000000086400000|100%| O| |TAMS 0x0000000086400000, 0x0000000086300000| Untracked +| 4|0x0000000086400000, 0x0000000086500000, 0x0000000086500000|100%| O| |TAMS 0x0000000086500000, 0x0000000086400000| Untracked +| 5|0x0000000086500000, 0x0000000086600000, 0x0000000086600000|100%| O| |TAMS 0x0000000086600000, 0x0000000086500000| Untracked +| 6|0x0000000086600000, 0x0000000086700000, 0x0000000086700000|100%| O| |TAMS 0x0000000086700000, 0x0000000086600000| Untracked +| 7|0x0000000086700000, 0x0000000086800000, 0x0000000086800000|100%| O| |TAMS 0x0000000086700000, 0x0000000086700000| Untracked +| 8|0x0000000086800000, 0x0000000086900000, 0x0000000086900000|100%| O| |TAMS 0x0000000086900000, 0x0000000086800000| Untracked +| 9|0x0000000086900000, 0x0000000086a00000, 0x0000000086a00000|100%| O| |TAMS 0x0000000086a00000, 0x0000000086900000| Untracked +| 10|0x0000000086a00000, 0x0000000086b00000, 0x0000000086b00000|100%| O| |TAMS 0x0000000086b00000, 0x0000000086a00000| Untracked +| 11|0x0000000086b00000, 0x0000000086c00000, 0x0000000086c00000|100%| O| |TAMS 0x0000000086c00000, 0x0000000086b00000| Untracked +| 12|0x0000000086c00000, 0x0000000086d00000, 0x0000000086d00000|100%| O| |TAMS 0x0000000086d00000, 0x0000000086c00000| Untracked +| 13|0x0000000086d00000, 0x0000000086e00000, 0x0000000086e00000|100%| O| |TAMS 0x0000000086e00000, 0x0000000086d00000| Untracked +| 14|0x0000000086e00000, 0x0000000086f00000, 0x0000000086f00000|100%| O| |TAMS 0x0000000086f00000, 0x0000000086e00000| Untracked +| 15|0x0000000086f00000, 0x0000000087000000, 0x0000000087000000|100%| O| |TAMS 0x0000000087000000, 0x0000000086f00000| Untracked +| 16|0x0000000087000000, 0x0000000087100000, 0x0000000087100000|100%| O| |TAMS 0x0000000087100000, 0x0000000087000000| Untracked +| 17|0x0000000087100000, 0x0000000087200000, 0x0000000087200000|100%| O| |TAMS 0x0000000087200000, 0x0000000087100000| Untracked +| 18|0x0000000087200000, 0x0000000087300000, 0x0000000087300000|100%| O| |TAMS 0x0000000087300000, 0x0000000087200000| Untracked +| 19|0x0000000087300000, 0x0000000087400000, 0x0000000087400000|100%| O| |TAMS 0x0000000087400000, 0x0000000087300000| Untracked +| 20|0x0000000087400000, 0x0000000087500000, 0x0000000087500000|100%| O| |TAMS 0x0000000087500000, 0x0000000087400000| Untracked +| 21|0x0000000087500000, 0x0000000087600000, 0x0000000087600000|100%| O| |TAMS 0x0000000087600000, 0x0000000087500000| Untracked +| 22|0x0000000087600000, 0x0000000087700000, 0x0000000087700000|100%| O| |TAMS 0x0000000087700000, 0x0000000087600000| Untracked +| 23|0x0000000087700000, 0x0000000087800000, 0x0000000087800000|100%| O| |TAMS 0x0000000087800000, 0x0000000087700000| Untracked +| 24|0x0000000087800000, 0x0000000087900000, 0x0000000087900000|100%| O| |TAMS 0x0000000087900000, 0x0000000087800000| Untracked +| 25|0x0000000087900000, 0x0000000087a00000, 0x0000000087a00000|100%| O| |TAMS 0x0000000087a00000, 0x0000000087900000| Untracked +| 26|0x0000000087a00000, 0x0000000087b00000, 0x0000000087b00000|100%| O| |TAMS 0x0000000087b00000, 0x0000000087a00000| Untracked +| 27|0x0000000087b00000, 0x0000000087c00000, 0x0000000087c00000|100%| O| |TAMS 0x0000000087c00000, 0x0000000087b00000| Untracked +| 28|0x0000000087c00000, 0x0000000087d00000, 0x0000000087d00000|100%| O| |TAMS 0x0000000087d00000, 0x0000000087c00000| Untracked +| 29|0x0000000087d00000, 0x0000000087e00000, 0x0000000087e00000|100%| O| |TAMS 0x0000000087e00000, 0x0000000087d00000| Untracked +| 30|0x0000000087e00000, 0x0000000087f00000, 0x0000000087f00000|100%| O| |TAMS 0x0000000087f00000, 0x0000000087e00000| Untracked +| 31|0x0000000087f00000, 0x0000000088000000, 0x0000000088000000|100%| O| |TAMS 0x0000000088000000, 0x0000000087f00000| Untracked +| 32|0x0000000088000000, 0x0000000088100000, 0x0000000088100000|100%| O| |TAMS 0x0000000088100000, 0x0000000088000000| Untracked +| 33|0x0000000088100000, 0x0000000088200000, 0x0000000088200000|100%| O| |TAMS 0x0000000088200000, 0x0000000088100000| Untracked +| 34|0x0000000088200000, 0x0000000088300000, 0x0000000088300000|100%| O| |TAMS 0x0000000088300000, 0x0000000088200000| Untracked +| 35|0x0000000088300000, 0x0000000088400000, 0x0000000088400000|100%| O| |TAMS 0x0000000088400000, 0x0000000088300000| Untracked +| 36|0x0000000088400000, 0x0000000088500000, 0x0000000088500000|100%| O| |TAMS 0x0000000088500000, 0x0000000088400000| Untracked +| 37|0x0000000088500000, 0x0000000088600000, 0x0000000088600000|100%| O| |TAMS 0x0000000088600000, 0x0000000088500000| Untracked +| 38|0x0000000088600000, 0x0000000088700000, 0x0000000088700000|100%| O| |TAMS 0x0000000088700000, 0x0000000088600000| Untracked +| 39|0x0000000088700000, 0x0000000088800000, 0x0000000088800000|100%| O| |TAMS 0x0000000088800000, 0x0000000088700000| Untracked +| 40|0x0000000088800000, 0x0000000088900000, 0x0000000088900000|100%| O| |TAMS 0x0000000088900000, 0x0000000088800000| Untracked +| 41|0x0000000088900000, 0x0000000088a00000, 0x0000000088a00000|100%| O| |TAMS 0x0000000088a00000, 0x0000000088900000| Untracked +| 42|0x0000000088a00000, 0x0000000088b00000, 0x0000000088b00000|100%| O| |TAMS 0x0000000088a9b400, 0x0000000088a00000| Untracked +| 43|0x0000000088b00000, 0x0000000088c00000, 0x0000000088c00000|100%| O| |TAMS 0x0000000088b00000, 0x0000000088b00000| Untracked +| 44|0x0000000088c00000, 0x0000000088d00000, 0x0000000088d00000|100%| O| |TAMS 0x0000000088c00000, 0x0000000088c00000| Untracked +| 45|0x0000000088d00000, 0x0000000088e00000, 0x0000000088e00000|100%| O| |TAMS 0x0000000088d00000, 0x0000000088d00000| Untracked +| 46|0x0000000088e00000, 0x0000000088f00000, 0x0000000088f00000|100%| O| |TAMS 0x0000000088e00000, 0x0000000088e00000| Untracked +| 47|0x0000000088f00000, 0x0000000089000000, 0x0000000089000000|100%| O| |TAMS 0x0000000088f00000, 0x0000000088f00000| Untracked +| 48|0x0000000089000000, 0x0000000089100000, 0x0000000089100000|100%|HS| |TAMS 0x0000000089000000, 0x0000000089000000| Complete +| 49|0x0000000089100000, 0x0000000089200000, 0x0000000089200000|100%| O| |TAMS 0x0000000089100000, 0x0000000089100000| Untracked +| 50|0x0000000089200000, 0x0000000089300000, 0x0000000089300000|100%| O| |TAMS 0x0000000089200000, 0x0000000089200000| Untracked +| 51|0x0000000089300000, 0x0000000089400000, 0x0000000089400000|100%| O| |TAMS 0x0000000089300000, 0x0000000089300000| Untracked +| 52|0x0000000089400000, 0x0000000089500000, 0x0000000089500000|100%| O| |TAMS 0x0000000089400000, 0x0000000089400000| Untracked +| 53|0x0000000089500000, 0x0000000089600000, 0x0000000089600000|100%| O| |TAMS 0x0000000089500000, 0x0000000089500000| Untracked +| 54|0x0000000089600000, 0x0000000089700000, 0x0000000089700000|100%| O| |TAMS 0x0000000089600000, 0x0000000089600000| Untracked +| 55|0x0000000089700000, 0x0000000089800000, 0x0000000089800000|100%| O| |TAMS 0x0000000089700000, 0x0000000089700000| Untracked +| 56|0x0000000089800000, 0x0000000089900000, 0x0000000089900000|100%|HS| |TAMS 0x0000000089800000, 0x0000000089800000| Complete +| 57|0x0000000089900000, 0x0000000089a00000, 0x0000000089a00000|100%| O| |TAMS 0x0000000089900000, 0x0000000089900000| Untracked +| 58|0x0000000089a00000, 0x0000000089b00000, 0x0000000089b00000|100%| O| |TAMS 0x0000000089a00000, 0x0000000089a00000| Untracked +| 59|0x0000000089b00000, 0x0000000089c00000, 0x0000000089c00000|100%| O| |TAMS 0x0000000089b00000, 0x0000000089b00000| Untracked +| 60|0x0000000089c00000, 0x0000000089d00000, 0x0000000089d00000|100%| O| |TAMS 0x0000000089c00000, 0x0000000089c00000| Untracked +| 61|0x0000000089d00000, 0x0000000089e00000, 0x0000000089e00000|100%| O| |TAMS 0x0000000089d00000, 0x0000000089d00000| Untracked +| 62|0x0000000089e00000, 0x0000000089f00000, 0x0000000089f00000|100%| O| |TAMS 0x0000000089e00000, 0x0000000089e00000| Untracked +| 63|0x0000000089f00000, 0x000000008a000000, 0x000000008a000000|100%| O| |TAMS 0x0000000089f00000, 0x0000000089f00000| Untracked +| 64|0x000000008a000000, 0x000000008a100000, 0x000000008a100000|100%| O| |TAMS 0x000000008a000000, 0x000000008a000000| Untracked +| 65|0x000000008a100000, 0x000000008a200000, 0x000000008a200000|100%| O| |TAMS 0x000000008a100000, 0x000000008a100000| Untracked +| 66|0x000000008a200000, 0x000000008a300000, 0x000000008a300000|100%| O| |TAMS 0x000000008a200000, 0x000000008a200000| Untracked +| 67|0x000000008a300000, 0x000000008a400000, 0x000000008a400000|100%| O| |TAMS 0x000000008a300000, 0x000000008a300000| Untracked +| 68|0x000000008a400000, 0x000000008a500000, 0x000000008a500000|100%| O| |TAMS 0x000000008a400000, 0x000000008a400000| Untracked +| 69|0x000000008a500000, 0x000000008a600000, 0x000000008a600000|100%| O| |TAMS 0x000000008a500000, 0x000000008a500000| Untracked +| 70|0x000000008a600000, 0x000000008a700000, 0x000000008a700000|100%| O| |TAMS 0x000000008a600000, 0x000000008a600000| Untracked +| 71|0x000000008a700000, 0x000000008a800000, 0x000000008a800000|100%| O| |TAMS 0x000000008a700000, 0x000000008a700000| Untracked +| 72|0x000000008a800000, 0x000000008a900000, 0x000000008a900000|100%| O| |TAMS 0x000000008a800000, 0x000000008a800000| Untracked +| 73|0x000000008a900000, 0x000000008aa00000, 0x000000008aa00000|100%| O| |TAMS 0x000000008a900000, 0x000000008a900000| Untracked +| 74|0x000000008aa00000, 0x000000008ab00000, 0x000000008ab00000|100%| O| |TAMS 0x000000008aa00000, 0x000000008aa00000| Untracked +| 75|0x000000008ab00000, 0x000000008ac00000, 0x000000008ac00000|100%| O| |TAMS 0x000000008ab00000, 0x000000008ab00000| Untracked +| 76|0x000000008ac00000, 0x000000008ad00000, 0x000000008ad00000|100%| O| |TAMS 0x000000008ac00000, 0x000000008ac00000| Untracked +| 77|0x000000008ad00000, 0x000000008ae00000, 0x000000008ae00000|100%| O| |TAMS 0x000000008ad00000, 0x000000008ad00000| Untracked +| 78|0x000000008ae00000, 0x000000008af00000, 0x000000008af00000|100%| O| |TAMS 0x000000008ae00000, 0x000000008ae00000| Untracked +| 79|0x000000008af00000, 0x000000008b000000, 0x000000008b000000|100%| O| |TAMS 0x000000008af00000, 0x000000008af00000| Untracked +| 80|0x000000008b000000, 0x000000008b100000, 0x000000008b100000|100%| O| |TAMS 0x000000008b000000, 0x000000008b000000| Untracked +| 81|0x000000008b100000, 0x000000008b200000, 0x000000008b200000|100%| O| |TAMS 0x000000008b100000, 0x000000008b100000| Untracked +| 82|0x000000008b200000, 0x000000008b300000, 0x000000008b300000|100%| O| |TAMS 0x000000008b200000, 0x000000008b200000| Untracked +| 83|0x000000008b300000, 0x000000008b400000, 0x000000008b400000|100%| O| |TAMS 0x000000008b300000, 0x000000008b300000| Untracked +| 84|0x000000008b400000, 0x000000008b500000, 0x000000008b500000|100%| O| |TAMS 0x000000008b400000, 0x000000008b400000| Untracked +| 85|0x000000008b500000, 0x000000008b600000, 0x000000008b600000|100%| O| |TAMS 0x000000008b500000, 0x000000008b500000| Untracked +| 86|0x000000008b600000, 0x000000008b700000, 0x000000008b700000|100%| O| |TAMS 0x000000008b600000, 0x000000008b600000| Untracked +| 87|0x000000008b700000, 0x000000008b800000, 0x000000008b800000|100%| O| |TAMS 0x000000008b700000, 0x000000008b700000| Untracked +| 88|0x000000008b800000, 0x000000008b900000, 0x000000008b900000|100%| O| |TAMS 0x000000008b800000, 0x000000008b800000| Untracked +| 89|0x000000008b900000, 0x000000008ba00000, 0x000000008ba00000|100%| O| |TAMS 0x000000008b900000, 0x000000008b900000| Untracked +| 90|0x000000008ba00000, 0x000000008bb00000, 0x000000008bb00000|100%| O| |TAMS 0x000000008ba00000, 0x000000008ba00000| Untracked +| 91|0x000000008bb00000, 0x000000008bc00000, 0x000000008bc00000|100%| O| |TAMS 0x000000008bb00000, 0x000000008bb00000| Untracked +| 92|0x000000008bc00000, 0x000000008bd00000, 0x000000008bd00000|100%| O| |TAMS 0x000000008bc00000, 0x000000008bc00000| Untracked +| 93|0x000000008bd00000, 0x000000008be00000, 0x000000008be00000|100%| O| |TAMS 0x000000008bd00000, 0x000000008bd00000| Untracked +| 94|0x000000008be00000, 0x000000008bf00000, 0x000000008bf00000|100%| O| |TAMS 0x000000008be00000, 0x000000008be00000| Untracked +| 95|0x000000008bf00000, 0x000000008c000000, 0x000000008c000000|100%| O| |TAMS 0x000000008bf00000, 0x000000008bf00000| Untracked +| 96|0x000000008c000000, 0x000000008c100000, 0x000000008c100000|100%| O| |TAMS 0x000000008c000000, 0x000000008c000000| Untracked +| 97|0x000000008c100000, 0x000000008c200000, 0x000000008c200000|100%| O| |TAMS 0x000000008c100000, 0x000000008c100000| Untracked +| 98|0x000000008c200000, 0x000000008c300000, 0x000000008c300000|100%| O| |TAMS 0x000000008c200000, 0x000000008c200000| Untracked +| 99|0x000000008c300000, 0x000000008c400000, 0x000000008c400000|100%| O| |TAMS 0x000000008c300000, 0x000000008c300000| Untracked +| 100|0x000000008c400000, 0x000000008c500000, 0x000000008c500000|100%| O| |TAMS 0x000000008c400000, 0x000000008c400000| Untracked +| 101|0x000000008c500000, 0x000000008c600000, 0x000000008c600000|100%| O| |TAMS 0x000000008c500000, 0x000000008c500000| Untracked +| 102|0x000000008c600000, 0x000000008c700000, 0x000000008c700000|100%| O| |TAMS 0x000000008c600000, 0x000000008c600000| Untracked +| 103|0x000000008c700000, 0x000000008c800000, 0x000000008c800000|100%| O| |TAMS 0x000000008c700000, 0x000000008c700000| Untracked +| 104|0x000000008c800000, 0x000000008c900000, 0x000000008c900000|100%| O| |TAMS 0x000000008c800000, 0x000000008c800000| Untracked +| 105|0x000000008c900000, 0x000000008ca00000, 0x000000008ca00000|100%| O| |TAMS 0x000000008c900000, 0x000000008c900000| Untracked +| 106|0x000000008ca00000, 0x000000008cb00000, 0x000000008cb00000|100%| O| |TAMS 0x000000008ca00000, 0x000000008ca00000| Untracked +| 107|0x000000008cb00000, 0x000000008cc00000, 0x000000008cc00000|100%| O| |TAMS 0x000000008cb00000, 0x000000008cb00000| Untracked +| 108|0x000000008cc00000, 0x000000008cd00000, 0x000000008cd00000|100%| O| |TAMS 0x000000008cc00000, 0x000000008cc00000| Untracked +| 109|0x000000008cd00000, 0x000000008ce00000, 0x000000008ce00000|100%| O| |TAMS 0x000000008cd00000, 0x000000008cd00000| Untracked +| 110|0x000000008ce00000, 0x000000008cf00000, 0x000000008cf00000|100%| O| |TAMS 0x000000008ce00000, 0x000000008ce00000| Untracked +| 111|0x000000008cf00000, 0x000000008d000000, 0x000000008d000000|100%| O| |TAMS 0x000000008cf00000, 0x000000008cf00000| Untracked +| 112|0x000000008d000000, 0x000000008d100000, 0x000000008d100000|100%| O| |TAMS 0x000000008d000000, 0x000000008d000000| Untracked +| 113|0x000000008d100000, 0x000000008d19a200, 0x000000008d200000| 60%| O| |TAMS 0x000000008d100000, 0x000000008d100000| Untracked +| 114|0x000000008d200000, 0x000000008d200000, 0x000000008d300000| 0%| F| |TAMS 0x000000008d200000, 0x000000008d200000| Untracked +| 115|0x000000008d300000, 0x000000008d300000, 0x000000008d400000| 0%| F| |TAMS 0x000000008d300000, 0x000000008d300000| Untracked +| 116|0x000000008d400000, 0x000000008d400000, 0x000000008d500000| 0%| F| |TAMS 0x000000008d400000, 0x000000008d400000| Untracked +| 117|0x000000008d500000, 0x000000008d500000, 0x000000008d600000| 0%| F| |TAMS 0x000000008d500000, 0x000000008d500000| Untracked +| 118|0x000000008d600000, 0x000000008d600000, 0x000000008d700000| 0%| F| |TAMS 0x000000008d600000, 0x000000008d600000| Untracked +| 119|0x000000008d700000, 0x000000008d700000, 0x000000008d800000| 0%| F| |TAMS 0x000000008d700000, 0x000000008d700000| Untracked +| 120|0x000000008d800000, 0x000000008d800000, 0x000000008d900000| 0%| F| |TAMS 0x000000008d800000, 0x000000008d800000| Untracked +| 121|0x000000008d900000, 0x000000008d900000, 0x000000008da00000| 0%| F| |TAMS 0x000000008d900000, 0x000000008d900000| Untracked +| 122|0x000000008da00000, 0x000000008da00000, 0x000000008db00000| 0%| F| |TAMS 0x000000008da00000, 0x000000008da00000| Untracked +| 123|0x000000008db00000, 0x000000008db00000, 0x000000008dc00000| 0%| F| |TAMS 0x000000008db00000, 0x000000008db00000| Untracked +| 124|0x000000008dc00000, 0x000000008dc00000, 0x000000008dd00000| 0%| F| |TAMS 0x000000008dc00000, 0x000000008dc00000| Untracked +| 125|0x000000008dd00000, 0x000000008dd00000, 0x000000008de00000| 0%| F| |TAMS 0x000000008dd00000, 0x000000008dd00000| Untracked +| 126|0x000000008de00000, 0x000000008de00000, 0x000000008df00000| 0%| F| |TAMS 0x000000008de00000, 0x000000008de00000| Untracked +| 127|0x000000008df00000, 0x000000008df00000, 0x000000008e000000| 0%| F| |TAMS 0x000000008df00000, 0x000000008df00000| Untracked +| 128|0x000000008e000000, 0x000000008e000000, 0x000000008e100000| 0%| F| |TAMS 0x000000008e000000, 0x000000008e000000| Untracked +| 129|0x000000008e100000, 0x000000008e100000, 0x000000008e200000| 0%| F| |TAMS 0x000000008e100000, 0x000000008e100000| Untracked +| 130|0x000000008e200000, 0x000000008e200000, 0x000000008e300000| 0%| F| |TAMS 0x000000008e200000, 0x000000008e200000| Untracked +| 131|0x000000008e300000, 0x000000008e300000, 0x000000008e400000| 0%| F| |TAMS 0x000000008e300000, 0x000000008e300000| Untracked +| 132|0x000000008e400000, 0x000000008e400000, 0x000000008e500000| 0%| F| |TAMS 0x000000008e400000, 0x000000008e400000| Untracked +| 133|0x000000008e500000, 0x000000008e500000, 0x000000008e600000| 0%| F| |TAMS 0x000000008e500000, 0x000000008e500000| Untracked +| 134|0x000000008e600000, 0x000000008e600000, 0x000000008e700000| 0%| F| |TAMS 0x000000008e600000, 0x000000008e600000| Untracked +| 135|0x000000008e700000, 0x000000008e700000, 0x000000008e800000| 0%| F| |TAMS 0x000000008e700000, 0x000000008e700000| Untracked +| 136|0x000000008e800000, 0x000000008e800000, 0x000000008e900000| 0%| F| |TAMS 0x000000008e800000, 0x000000008e800000| Untracked +| 137|0x000000008e900000, 0x000000008e900000, 0x000000008ea00000| 0%| F| |TAMS 0x000000008e900000, 0x000000008e900000| Untracked +| 138|0x000000008ea00000, 0x000000008ea00000, 0x000000008eb00000| 0%| F| |TAMS 0x000000008ea00000, 0x000000008ea00000| Untracked +| 139|0x000000008eb00000, 0x000000008eb00000, 0x000000008ec00000| 0%| F| |TAMS 0x000000008eb00000, 0x000000008eb00000| Untracked +| 140|0x000000008ec00000, 0x000000008ec00000, 0x000000008ed00000| 0%| F| |TAMS 0x000000008ec00000, 0x000000008ec00000| Untracked +| 141|0x000000008ed00000, 0x000000008ed00000, 0x000000008ee00000| 0%| F| |TAMS 0x000000008ed00000, 0x000000008ed00000| Untracked +| 142|0x000000008ee00000, 0x000000008ee00000, 0x000000008ef00000| 0%| F| |TAMS 0x000000008ee00000, 0x000000008ee00000| Untracked +| 143|0x000000008ef00000, 0x000000008ef00000, 0x000000008f000000| 0%| F| |TAMS 0x000000008ef00000, 0x000000008ef00000| Untracked +| 144|0x000000008f000000, 0x000000008f000000, 0x000000008f100000| 0%| F| |TAMS 0x000000008f000000, 0x000000008f000000| Untracked +| 145|0x000000008f100000, 0x000000008f100000, 0x000000008f200000| 0%| F| |TAMS 0x000000008f100000, 0x000000008f100000| Untracked +| 146|0x000000008f200000, 0x000000008f200000, 0x000000008f300000| 0%| F| |TAMS 0x000000008f200000, 0x000000008f200000| Untracked +| 147|0x000000008f300000, 0x000000008f300000, 0x000000008f400000| 0%| F| |TAMS 0x000000008f300000, 0x000000008f300000| Untracked +| 148|0x000000008f400000, 0x000000008f400000, 0x000000008f500000| 0%| F| |TAMS 0x000000008f400000, 0x000000008f400000| Untracked +| 149|0x000000008f500000, 0x000000008f500000, 0x000000008f600000| 0%| F| |TAMS 0x000000008f500000, 0x000000008f500000| Untracked +| 150|0x000000008f600000, 0x000000008f600000, 0x000000008f700000| 0%| F| |TAMS 0x000000008f600000, 0x000000008f600000| Untracked +| 151|0x000000008f700000, 0x000000008f700000, 0x000000008f800000| 0%| F| |TAMS 0x000000008f700000, 0x000000008f700000| Untracked +| 152|0x000000008f800000, 0x000000008f800000, 0x000000008f900000| 0%| F| |TAMS 0x000000008f800000, 0x000000008f800000| Untracked +| 153|0x000000008f900000, 0x000000008f900000, 0x000000008fa00000| 0%| F| |TAMS 0x000000008f900000, 0x000000008f900000| Untracked +| 154|0x000000008fa00000, 0x000000008fa00000, 0x000000008fb00000| 0%| F| |TAMS 0x000000008fa00000, 0x000000008fa00000| Untracked +| 155|0x000000008fb00000, 0x000000008fb00000, 0x000000008fc00000| 0%| F| |TAMS 0x000000008fb00000, 0x000000008fb00000| Untracked +| 156|0x000000008fc00000, 0x000000008fc00000, 0x000000008fd00000| 0%| F| |TAMS 0x000000008fc00000, 0x000000008fc00000| Untracked +| 157|0x000000008fd00000, 0x000000008fd00000, 0x000000008fe00000| 0%| F| |TAMS 0x000000008fd00000, 0x000000008fd00000| Untracked +| 158|0x000000008fe00000, 0x000000008fe00000, 0x000000008ff00000| 0%| F| |TAMS 0x000000008fe00000, 0x000000008fe00000| Untracked +| 159|0x000000008ff00000, 0x000000008ff00000, 0x0000000090000000| 0%| F| |TAMS 0x000000008ff00000, 0x000000008ff00000| Untracked +| 160|0x0000000090000000, 0x0000000090000000, 0x0000000090100000| 0%| F| |TAMS 0x0000000090000000, 0x0000000090000000| Untracked +| 161|0x0000000090100000, 0x0000000090100000, 0x0000000090200000| 0%| F| |TAMS 0x0000000090100000, 0x0000000090100000| Untracked +| 162|0x0000000090200000, 0x0000000090200000, 0x0000000090300000| 0%| F| |TAMS 0x0000000090200000, 0x0000000090200000| Untracked +| 163|0x0000000090300000, 0x0000000090300000, 0x0000000090400000| 0%| F| |TAMS 0x0000000090300000, 0x0000000090300000| Untracked +| 164|0x0000000090400000, 0x0000000090400000, 0x0000000090500000| 0%| F| |TAMS 0x0000000090400000, 0x0000000090400000| Untracked +| 165|0x0000000090500000, 0x0000000090500000, 0x0000000090600000| 0%| F| |TAMS 0x0000000090500000, 0x0000000090500000| Untracked +| 166|0x0000000090600000, 0x0000000090600000, 0x0000000090700000| 0%| F| |TAMS 0x0000000090600000, 0x0000000090600000| Untracked +| 167|0x0000000090700000, 0x0000000090700000, 0x0000000090800000| 0%| F| |TAMS 0x0000000090700000, 0x0000000090700000| Untracked +| 168|0x0000000090800000, 0x0000000090800000, 0x0000000090900000| 0%| F| |TAMS 0x0000000090800000, 0x0000000090800000| Untracked +| 169|0x0000000090900000, 0x0000000090900000, 0x0000000090a00000| 0%| F| |TAMS 0x0000000090900000, 0x0000000090900000| Untracked +| 170|0x0000000090a00000, 0x0000000090a00000, 0x0000000090b00000| 0%| F| |TAMS 0x0000000090a00000, 0x0000000090a00000| Untracked +| 171|0x0000000090b00000, 0x0000000090b00000, 0x0000000090c00000| 0%| F| |TAMS 0x0000000090b00000, 0x0000000090b00000| Untracked +| 172|0x0000000090c00000, 0x0000000090c00000, 0x0000000090d00000| 0%| F| |TAMS 0x0000000090c00000, 0x0000000090c00000| Untracked +| 173|0x0000000090d00000, 0x0000000090d00000, 0x0000000090e00000| 0%| F| |TAMS 0x0000000090d00000, 0x0000000090d00000| Untracked +| 174|0x0000000090e00000, 0x0000000090e00000, 0x0000000090f00000| 0%| F| |TAMS 0x0000000090e00000, 0x0000000090e00000| Untracked +| 175|0x0000000090f00000, 0x0000000090f00000, 0x0000000091000000| 0%| F| |TAMS 0x0000000090f00000, 0x0000000090f00000| Untracked +| 176|0x0000000091000000, 0x0000000091000000, 0x0000000091100000| 0%| F| |TAMS 0x0000000091000000, 0x0000000091000000| Untracked +| 177|0x0000000091100000, 0x0000000091100000, 0x0000000091200000| 0%| F| |TAMS 0x0000000091100000, 0x0000000091100000| Untracked +| 178|0x0000000091200000, 0x0000000091200000, 0x0000000091300000| 0%| F| |TAMS 0x0000000091200000, 0x0000000091200000| Untracked +| 179|0x0000000091300000, 0x0000000091300000, 0x0000000091400000| 0%| F| |TAMS 0x0000000091300000, 0x0000000091300000| Untracked +| 180|0x0000000091400000, 0x0000000091400000, 0x0000000091500000| 0%| F| |TAMS 0x0000000091400000, 0x0000000091400000| Untracked +| 181|0x0000000091500000, 0x0000000091500000, 0x0000000091600000| 0%| F| |TAMS 0x0000000091500000, 0x0000000091500000| Untracked +| 182|0x0000000091600000, 0x0000000091600000, 0x0000000091700000| 0%| F| |TAMS 0x0000000091600000, 0x0000000091600000| Untracked +| 183|0x0000000091700000, 0x0000000091700000, 0x0000000091800000| 0%| F| |TAMS 0x0000000091700000, 0x0000000091700000| Untracked +| 184|0x0000000091800000, 0x0000000091800000, 0x0000000091900000| 0%| F| |TAMS 0x0000000091800000, 0x0000000091800000| Untracked +| 185|0x0000000091900000, 0x0000000091900000, 0x0000000091a00000| 0%| F| |TAMS 0x0000000091900000, 0x0000000091900000| Untracked +| 186|0x0000000091a00000, 0x0000000091a00000, 0x0000000091b00000| 0%| F| |TAMS 0x0000000091a00000, 0x0000000091a00000| Untracked +| 187|0x0000000091b00000, 0x0000000091b00000, 0x0000000091c00000| 0%| F| |TAMS 0x0000000091b00000, 0x0000000091b00000| Untracked +| 188|0x0000000091c00000, 0x0000000091c00000, 0x0000000091d00000| 0%| F| |TAMS 0x0000000091c00000, 0x0000000091c00000| Untracked +| 189|0x0000000091d00000, 0x0000000091d00000, 0x0000000091e00000| 0%| F| |TAMS 0x0000000091d00000, 0x0000000091d00000| Untracked +| 190|0x0000000091e00000, 0x0000000091e00000, 0x0000000091f00000| 0%| F| |TAMS 0x0000000091e00000, 0x0000000091e00000| Untracked +| 191|0x0000000091f00000, 0x0000000091f00000, 0x0000000092000000| 0%| F| |TAMS 0x0000000091f00000, 0x0000000091f00000| Untracked +| 192|0x0000000092000000, 0x0000000092000000, 0x0000000092100000| 0%| F| |TAMS 0x0000000092000000, 0x0000000092000000| Untracked +| 193|0x0000000092100000, 0x0000000092100000, 0x0000000092200000| 0%| F| |TAMS 0x0000000092100000, 0x0000000092100000| Untracked +| 194|0x0000000092200000, 0x0000000092200000, 0x0000000092300000| 0%| F| |TAMS 0x0000000092200000, 0x0000000092200000| Untracked +| 195|0x0000000092300000, 0x0000000092300000, 0x0000000092400000| 0%| F| |TAMS 0x0000000092300000, 0x0000000092300000| Untracked +| 196|0x0000000092400000, 0x0000000092400000, 0x0000000092500000| 0%| F| |TAMS 0x0000000092400000, 0x0000000092400000| Untracked +| 197|0x0000000092500000, 0x0000000092500000, 0x0000000092600000| 0%| F| |TAMS 0x0000000092500000, 0x0000000092500000| Untracked +| 198|0x0000000092600000, 0x0000000092600000, 0x0000000092700000| 0%| F| |TAMS 0x0000000092600000, 0x0000000092600000| Untracked +| 199|0x0000000092700000, 0x0000000092700000, 0x0000000092800000| 0%| F| |TAMS 0x0000000092700000, 0x0000000092700000| Untracked +| 200|0x0000000092800000, 0x0000000092800000, 0x0000000092900000| 0%| F| |TAMS 0x0000000092800000, 0x0000000092800000| Untracked +| 201|0x0000000092900000, 0x0000000092900000, 0x0000000092a00000| 0%| F| |TAMS 0x0000000092900000, 0x0000000092900000| Untracked +| 202|0x0000000092a00000, 0x0000000092a00000, 0x0000000092b00000| 0%| F| |TAMS 0x0000000092a00000, 0x0000000092a00000| Untracked +| 203|0x0000000092b00000, 0x0000000092b00000, 0x0000000092c00000| 0%| F| |TAMS 0x0000000092b00000, 0x0000000092b00000| Untracked +| 204|0x0000000092c00000, 0x0000000092c00000, 0x0000000092d00000| 0%| F| |TAMS 0x0000000092c00000, 0x0000000092c00000| Untracked +| 205|0x0000000092d00000, 0x0000000092d00000, 0x0000000092e00000| 0%| F| |TAMS 0x0000000092d00000, 0x0000000092d00000| Untracked +| 206|0x0000000092e00000, 0x0000000092e00000, 0x0000000092f00000| 0%| F| |TAMS 0x0000000092e00000, 0x0000000092e00000| Untracked +| 207|0x0000000092f00000, 0x0000000092f00000, 0x0000000093000000| 0%| F| |TAMS 0x0000000092f00000, 0x0000000092f00000| Untracked +| 208|0x0000000093000000, 0x0000000093000000, 0x0000000093100000| 0%| F| |TAMS 0x0000000093000000, 0x0000000093000000| Untracked +| 209|0x0000000093100000, 0x0000000093100000, 0x0000000093200000| 0%| F| |TAMS 0x0000000093100000, 0x0000000093100000| Untracked +| 210|0x0000000093200000, 0x0000000093200000, 0x0000000093300000| 0%| F| |TAMS 0x0000000093200000, 0x0000000093200000| Untracked +| 211|0x0000000093300000, 0x0000000093300000, 0x0000000093400000| 0%| F| |TAMS 0x0000000093300000, 0x0000000093300000| Untracked +| 212|0x0000000093400000, 0x0000000093400000, 0x0000000093500000| 0%| F| |TAMS 0x0000000093400000, 0x0000000093400000| Untracked +| 213|0x0000000093500000, 0x0000000093500000, 0x0000000093600000| 0%| F| |TAMS 0x0000000093500000, 0x0000000093500000| Untracked +| 214|0x0000000093600000, 0x0000000093600000, 0x0000000093700000| 0%| F| |TAMS 0x0000000093600000, 0x0000000093600000| Untracked +| 215|0x0000000093700000, 0x0000000093700000, 0x0000000093800000| 0%| F| |TAMS 0x0000000093700000, 0x0000000093700000| Untracked +| 216|0x0000000093800000, 0x0000000093800000, 0x0000000093900000| 0%| F| |TAMS 0x0000000093800000, 0x0000000093800000| Untracked +| 217|0x0000000093900000, 0x0000000093900000, 0x0000000093a00000| 0%| F| |TAMS 0x0000000093900000, 0x0000000093900000| Untracked +| 218|0x0000000093a00000, 0x0000000093a00000, 0x0000000093b00000| 0%| F| |TAMS 0x0000000093a00000, 0x0000000093a00000| Untracked +| 219|0x0000000093b00000, 0x0000000093b00000, 0x0000000093c00000| 0%| F| |TAMS 0x0000000093b00000, 0x0000000093b00000| Untracked +| 220|0x0000000093c00000, 0x0000000093c00000, 0x0000000093d00000| 0%| F| |TAMS 0x0000000093c00000, 0x0000000093c00000| Untracked +| 221|0x0000000093d00000, 0x0000000093d00000, 0x0000000093e00000| 0%| F| |TAMS 0x0000000093d00000, 0x0000000093d00000| Untracked +| 222|0x0000000093e00000, 0x0000000093e00000, 0x0000000093f00000| 0%| F| |TAMS 0x0000000093e00000, 0x0000000093e00000| Untracked +| 223|0x0000000093f00000, 0x0000000093f00000, 0x0000000094000000| 0%| F| |TAMS 0x0000000093f00000, 0x0000000093f00000| Untracked +| 224|0x0000000094000000, 0x0000000094000000, 0x0000000094100000| 0%| F| |TAMS 0x0000000094000000, 0x0000000094000000| Untracked +| 225|0x0000000094100000, 0x0000000094100000, 0x0000000094200000| 0%| F| |TAMS 0x0000000094100000, 0x0000000094100000| Untracked +| 226|0x0000000094200000, 0x0000000094200000, 0x0000000094300000| 0%| F| |TAMS 0x0000000094200000, 0x0000000094200000| Untracked +| 227|0x0000000094300000, 0x0000000094300000, 0x0000000094400000| 0%| F| |TAMS 0x0000000094300000, 0x0000000094300000| Untracked +| 228|0x0000000094400000, 0x0000000094400000, 0x0000000094500000| 0%| F| |TAMS 0x0000000094400000, 0x0000000094400000| Untracked +| 229|0x0000000094500000, 0x0000000094500000, 0x0000000094600000| 0%| F| |TAMS 0x0000000094500000, 0x0000000094500000| Untracked +| 230|0x0000000094600000, 0x0000000094600000, 0x0000000094700000| 0%| F| |TAMS 0x0000000094600000, 0x0000000094600000| Untracked +| 231|0x0000000094700000, 0x0000000094700000, 0x0000000094800000| 0%| F| |TAMS 0x0000000094700000, 0x0000000094700000| Untracked +| 232|0x0000000094800000, 0x0000000094800000, 0x0000000094900000| 0%| F| |TAMS 0x0000000094800000, 0x0000000094800000| Untracked +| 233|0x0000000094900000, 0x0000000094900000, 0x0000000094a00000| 0%| F| |TAMS 0x0000000094900000, 0x0000000094900000| Untracked +| 234|0x0000000094a00000, 0x0000000094a00000, 0x0000000094b00000| 0%| F| |TAMS 0x0000000094a00000, 0x0000000094a00000| Untracked +| 235|0x0000000094b00000, 0x0000000094b00000, 0x0000000094c00000| 0%| F| |TAMS 0x0000000094b00000, 0x0000000094b00000| Untracked +| 236|0x0000000094c00000, 0x0000000094c00000, 0x0000000094d00000| 0%| F| |TAMS 0x0000000094c00000, 0x0000000094c00000| Untracked +| 237|0x0000000094d00000, 0x0000000094d00000, 0x0000000094e00000| 0%| F| |TAMS 0x0000000094d00000, 0x0000000094d00000| Untracked +| 238|0x0000000094e00000, 0x0000000094e00000, 0x0000000094f00000| 0%| F| |TAMS 0x0000000094e00000, 0x0000000094e00000| Untracked +| 239|0x0000000094f00000, 0x0000000094f00000, 0x0000000095000000| 0%| F| |TAMS 0x0000000094f00000, 0x0000000094f00000| Untracked +| 240|0x0000000095000000, 0x0000000095000000, 0x0000000095100000| 0%| F| |TAMS 0x0000000095000000, 0x0000000095000000| Untracked +| 241|0x0000000095100000, 0x0000000095100000, 0x0000000095200000| 0%| F| |TAMS 0x0000000095100000, 0x0000000095100000| Untracked +| 242|0x0000000095200000, 0x0000000095200000, 0x0000000095300000| 0%| F| |TAMS 0x0000000095200000, 0x0000000095200000| Untracked +| 243|0x0000000095300000, 0x0000000095300000, 0x0000000095400000| 0%| F| |TAMS 0x0000000095300000, 0x0000000095300000| Untracked +| 244|0x0000000095400000, 0x0000000095400000, 0x0000000095500000| 0%| F| |TAMS 0x0000000095400000, 0x0000000095400000| Untracked +| 245|0x0000000095500000, 0x0000000095500000, 0x0000000095600000| 0%| F| |TAMS 0x0000000095500000, 0x0000000095500000| Untracked +| 246|0x0000000095600000, 0x0000000095600000, 0x0000000095700000| 0%| F| |TAMS 0x0000000095600000, 0x0000000095600000| Untracked +| 247|0x0000000095700000, 0x0000000095700000, 0x0000000095800000| 0%| F| |TAMS 0x0000000095700000, 0x0000000095700000| Untracked +| 248|0x0000000095800000, 0x0000000095800000, 0x0000000095900000| 0%| F| |TAMS 0x0000000095800000, 0x0000000095800000| Untracked +| 249|0x0000000095900000, 0x0000000095900000, 0x0000000095a00000| 0%| F| |TAMS 0x0000000095900000, 0x0000000095900000| Untracked +| 250|0x0000000095a00000, 0x0000000095a00000, 0x0000000095b00000| 0%| F| |TAMS 0x0000000095a00000, 0x0000000095a00000| Untracked +| 251|0x0000000095b00000, 0x0000000095b00000, 0x0000000095c00000| 0%| F| |TAMS 0x0000000095b00000, 0x0000000095b00000| Untracked +| 252|0x0000000095c00000, 0x0000000095c00000, 0x0000000095d00000| 0%| F| |TAMS 0x0000000095c00000, 0x0000000095c00000| Untracked +| 253|0x0000000095d00000, 0x0000000095d00000, 0x0000000095e00000| 0%| F| |TAMS 0x0000000095d00000, 0x0000000095d00000| Untracked +| 254|0x0000000095e00000, 0x0000000095e00000, 0x0000000095f00000| 0%| F| |TAMS 0x0000000095e00000, 0x0000000095e00000| Untracked +| 255|0x0000000095f00000, 0x0000000095f00000, 0x0000000096000000| 0%| F| |TAMS 0x0000000095f00000, 0x0000000095f00000| Untracked +| 256|0x0000000096000000, 0x0000000096000000, 0x0000000096100000| 0%| F| |TAMS 0x0000000096000000, 0x0000000096000000| Untracked +| 257|0x0000000096100000, 0x0000000096100000, 0x0000000096200000| 0%| F| |TAMS 0x0000000096100000, 0x0000000096100000| Untracked +| 258|0x0000000096200000, 0x0000000096200000, 0x0000000096300000| 0%| F| |TAMS 0x0000000096200000, 0x0000000096200000| Untracked +| 259|0x0000000096300000, 0x0000000096300000, 0x0000000096400000| 0%| F| |TAMS 0x0000000096300000, 0x0000000096300000| Untracked +| 260|0x0000000096400000, 0x0000000096400000, 0x0000000096500000| 0%| F| |TAMS 0x0000000096400000, 0x0000000096400000| Untracked +| 261|0x0000000096500000, 0x0000000096500000, 0x0000000096600000| 0%| F| |TAMS 0x0000000096500000, 0x0000000096500000| Untracked +| 262|0x0000000096600000, 0x0000000096600000, 0x0000000096700000| 0%| F| |TAMS 0x0000000096600000, 0x0000000096600000| Untracked +| 263|0x0000000096700000, 0x0000000096700000, 0x0000000096800000| 0%| F| |TAMS 0x0000000096700000, 0x0000000096700000| Untracked +| 264|0x0000000096800000, 0x0000000096800000, 0x0000000096900000| 0%| F| |TAMS 0x0000000096800000, 0x0000000096800000| Untracked +| 265|0x0000000096900000, 0x0000000096900000, 0x0000000096a00000| 0%| F| |TAMS 0x0000000096900000, 0x0000000096900000| Untracked +| 266|0x0000000096a00000, 0x0000000096a00000, 0x0000000096b00000| 0%| F| |TAMS 0x0000000096a00000, 0x0000000096a00000| Untracked +| 267|0x0000000096b00000, 0x0000000096b00000, 0x0000000096c00000| 0%| F| |TAMS 0x0000000096b00000, 0x0000000096b00000| Untracked +| 268|0x0000000096c00000, 0x0000000096c00000, 0x0000000096d00000| 0%| F| |TAMS 0x0000000096c00000, 0x0000000096c00000| Untracked +| 269|0x0000000096d00000, 0x0000000096d00000, 0x0000000096e00000| 0%| F| |TAMS 0x0000000096d00000, 0x0000000096d00000| Untracked +| 270|0x0000000096e00000, 0x0000000096e00000, 0x0000000096f00000| 0%| F| |TAMS 0x0000000096e00000, 0x0000000096e00000| Untracked +| 271|0x0000000096f00000, 0x0000000096f00000, 0x0000000097000000| 0%| F| |TAMS 0x0000000096f00000, 0x0000000096f00000| Untracked +| 272|0x0000000097000000, 0x0000000097000000, 0x0000000097100000| 0%| F| |TAMS 0x0000000097000000, 0x0000000097000000| Untracked +| 273|0x0000000097100000, 0x0000000097100000, 0x0000000097200000| 0%| F| |TAMS 0x0000000097100000, 0x0000000097100000| Untracked +| 274|0x0000000097200000, 0x0000000097200000, 0x0000000097300000| 0%| F| |TAMS 0x0000000097200000, 0x0000000097200000| Untracked +| 275|0x0000000097300000, 0x0000000097300000, 0x0000000097400000| 0%| F| |TAMS 0x0000000097300000, 0x0000000097300000| Untracked +| 276|0x0000000097400000, 0x0000000097400000, 0x0000000097500000| 0%| F| |TAMS 0x0000000097400000, 0x0000000097400000| Untracked +| 277|0x0000000097500000, 0x0000000097500000, 0x0000000097600000| 0%| F| |TAMS 0x0000000097500000, 0x0000000097500000| Untracked +| 278|0x0000000097600000, 0x0000000097600000, 0x0000000097700000| 0%| F| |TAMS 0x0000000097600000, 0x0000000097600000| Untracked +| 279|0x0000000097700000, 0x0000000097700000, 0x0000000097800000| 0%| F| |TAMS 0x0000000097700000, 0x0000000097700000| Untracked +| 280|0x0000000097800000, 0x0000000097800000, 0x0000000097900000| 0%| F| |TAMS 0x0000000097800000, 0x0000000097800000| Untracked +| 281|0x0000000097900000, 0x0000000097900000, 0x0000000097a00000| 0%| F| |TAMS 0x0000000097900000, 0x0000000097900000| Untracked +| 282|0x0000000097a00000, 0x0000000097a00000, 0x0000000097b00000| 0%| F| |TAMS 0x0000000097a00000, 0x0000000097a00000| Untracked +| 283|0x0000000097b00000, 0x0000000097b00000, 0x0000000097c00000| 0%| F| |TAMS 0x0000000097b00000, 0x0000000097b00000| Untracked +| 284|0x0000000097c00000, 0x0000000097c00000, 0x0000000097d00000| 0%| F| |TAMS 0x0000000097c00000, 0x0000000097c00000| Untracked +| 285|0x0000000097d00000, 0x0000000097d00000, 0x0000000097e00000| 0%| F| |TAMS 0x0000000097d00000, 0x0000000097d00000| Untracked +| 286|0x0000000097e00000, 0x0000000097e00000, 0x0000000097f00000| 0%| F| |TAMS 0x0000000097e00000, 0x0000000097e00000| Untracked +| 287|0x0000000097f00000, 0x0000000097f00000, 0x0000000098000000| 0%| F| |TAMS 0x0000000097f00000, 0x0000000097f00000| Untracked +| 288|0x0000000098000000, 0x0000000098000000, 0x0000000098100000| 0%| F| |TAMS 0x0000000098000000, 0x0000000098000000| Untracked +| 289|0x0000000098100000, 0x0000000098100000, 0x0000000098200000| 0%| F| |TAMS 0x0000000098100000, 0x0000000098100000| Untracked +| 290|0x0000000098200000, 0x0000000098200000, 0x0000000098300000| 0%| F| |TAMS 0x0000000098200000, 0x0000000098200000| Untracked +| 291|0x0000000098300000, 0x0000000098300000, 0x0000000098400000| 0%| F| |TAMS 0x0000000098300000, 0x0000000098300000| Untracked +| 292|0x0000000098400000, 0x0000000098400000, 0x0000000098500000| 0%| F| |TAMS 0x0000000098400000, 0x0000000098400000| Untracked +| 293|0x0000000098500000, 0x0000000098500000, 0x0000000098600000| 0%| F| |TAMS 0x0000000098500000, 0x0000000098500000| Untracked +| 294|0x0000000098600000, 0x0000000098600000, 0x0000000098700000| 0%| F| |TAMS 0x0000000098600000, 0x0000000098600000| Untracked +| 295|0x0000000098700000, 0x0000000098700000, 0x0000000098800000| 0%| F| |TAMS 0x0000000098700000, 0x0000000098700000| Untracked +| 296|0x0000000098800000, 0x0000000098800000, 0x0000000098900000| 0%| F| |TAMS 0x0000000098800000, 0x0000000098800000| Untracked +| 297|0x0000000098900000, 0x0000000098900000, 0x0000000098a00000| 0%| F| |TAMS 0x0000000098900000, 0x0000000098900000| Untracked +| 298|0x0000000098a00000, 0x0000000098a00000, 0x0000000098b00000| 0%| F| |TAMS 0x0000000098a00000, 0x0000000098a00000| Untracked +| 299|0x0000000098b00000, 0x0000000098b00000, 0x0000000098c00000| 0%| F| |TAMS 0x0000000098b00000, 0x0000000098b00000| Untracked +| 300|0x0000000098c00000, 0x0000000098c00000, 0x0000000098d00000| 0%| F| |TAMS 0x0000000098c00000, 0x0000000098c00000| Untracked +| 301|0x0000000098d00000, 0x0000000098d00000, 0x0000000098e00000| 0%| F| |TAMS 0x0000000098d00000, 0x0000000098d00000| Untracked +| 302|0x0000000098e00000, 0x0000000098e00000, 0x0000000098f00000| 0%| F| |TAMS 0x0000000098e00000, 0x0000000098e00000| Untracked +| 303|0x0000000098f00000, 0x0000000098f00000, 0x0000000099000000| 0%| F| |TAMS 0x0000000098f00000, 0x0000000098f00000| Untracked +| 304|0x0000000099000000, 0x0000000099000000, 0x0000000099100000| 0%| F| |TAMS 0x0000000099000000, 0x0000000099000000| Untracked +| 305|0x0000000099100000, 0x0000000099100000, 0x0000000099200000| 0%| F| |TAMS 0x0000000099100000, 0x0000000099100000| Untracked +| 306|0x0000000099200000, 0x0000000099200000, 0x0000000099300000| 0%| F| |TAMS 0x0000000099200000, 0x0000000099200000| Untracked +| 307|0x0000000099300000, 0x0000000099300000, 0x0000000099400000| 0%| F| |TAMS 0x0000000099300000, 0x0000000099300000| Untracked +| 308|0x0000000099400000, 0x0000000099400000, 0x0000000099500000| 0%| F| |TAMS 0x0000000099400000, 0x0000000099400000| Untracked +| 309|0x0000000099500000, 0x0000000099500000, 0x0000000099600000| 0%| F| |TAMS 0x0000000099500000, 0x0000000099500000| Untracked +| 310|0x0000000099600000, 0x0000000099600000, 0x0000000099700000| 0%| F| |TAMS 0x0000000099600000, 0x0000000099600000| Untracked +| 311|0x0000000099700000, 0x0000000099700000, 0x0000000099800000| 0%| F| |TAMS 0x0000000099700000, 0x0000000099700000| Untracked +| 312|0x0000000099800000, 0x0000000099800000, 0x0000000099900000| 0%| F| |TAMS 0x0000000099800000, 0x0000000099800000| Untracked +| 313|0x0000000099900000, 0x0000000099900000, 0x0000000099a00000| 0%| F| |TAMS 0x0000000099900000, 0x0000000099900000| Untracked +| 314|0x0000000099a00000, 0x0000000099a00000, 0x0000000099b00000| 0%| F| |TAMS 0x0000000099a00000, 0x0000000099a00000| Untracked +| 315|0x0000000099b00000, 0x0000000099b00000, 0x0000000099c00000| 0%| F| |TAMS 0x0000000099b00000, 0x0000000099b00000| Untracked +| 316|0x0000000099c00000, 0x0000000099c00000, 0x0000000099d00000| 0%| F| |TAMS 0x0000000099c00000, 0x0000000099c00000| Untracked +| 317|0x0000000099d00000, 0x0000000099d00000, 0x0000000099e00000| 0%| F| |TAMS 0x0000000099d00000, 0x0000000099d00000| Untracked +| 318|0x0000000099e00000, 0x0000000099e00000, 0x0000000099f00000| 0%| F| |TAMS 0x0000000099e00000, 0x0000000099e00000| Untracked +| 319|0x0000000099f00000, 0x0000000099f00000, 0x000000009a000000| 0%| F| |TAMS 0x0000000099f00000, 0x0000000099f00000| Untracked +| 320|0x000000009a000000, 0x000000009a000000, 0x000000009a100000| 0%| F| |TAMS 0x000000009a000000, 0x000000009a000000| Untracked +| 321|0x000000009a100000, 0x000000009a100000, 0x000000009a200000| 0%| F| |TAMS 0x000000009a100000, 0x000000009a100000| Untracked +| 322|0x000000009a200000, 0x000000009a200000, 0x000000009a300000| 0%| F| |TAMS 0x000000009a200000, 0x000000009a200000| Untracked +| 323|0x000000009a300000, 0x000000009a300000, 0x000000009a400000| 0%| F| |TAMS 0x000000009a300000, 0x000000009a300000| Untracked +| 324|0x000000009a400000, 0x000000009a400000, 0x000000009a500000| 0%| F| |TAMS 0x000000009a400000, 0x000000009a400000| Untracked +| 325|0x000000009a500000, 0x000000009a500000, 0x000000009a600000| 0%| F| |TAMS 0x000000009a500000, 0x000000009a500000| Untracked +| 326|0x000000009a600000, 0x000000009a600000, 0x000000009a700000| 0%| F| |TAMS 0x000000009a600000, 0x000000009a600000| Untracked +| 327|0x000000009a700000, 0x000000009a700000, 0x000000009a800000| 0%| F| |TAMS 0x000000009a700000, 0x000000009a700000| Untracked +| 328|0x000000009a800000, 0x000000009a800000, 0x000000009a900000| 0%| F| |TAMS 0x000000009a800000, 0x000000009a800000| Untracked +| 329|0x000000009a900000, 0x000000009a900000, 0x000000009aa00000| 0%| F| |TAMS 0x000000009a900000, 0x000000009a900000| Untracked +| 330|0x000000009aa00000, 0x000000009aa00000, 0x000000009ab00000| 0%| F| |TAMS 0x000000009aa00000, 0x000000009aa00000| Untracked +| 331|0x000000009ab00000, 0x000000009ab00000, 0x000000009ac00000| 0%| F| |TAMS 0x000000009ab00000, 0x000000009ab00000| Untracked +| 332|0x000000009ac00000, 0x000000009ac00000, 0x000000009ad00000| 0%| F| |TAMS 0x000000009ac00000, 0x000000009ac00000| Untracked +| 333|0x000000009ad00000, 0x000000009ad00000, 0x000000009ae00000| 0%| F| |TAMS 0x000000009ad00000, 0x000000009ad00000| Untracked +| 334|0x000000009ae00000, 0x000000009ae00000, 0x000000009af00000| 0%| F| |TAMS 0x000000009ae00000, 0x000000009ae00000| Untracked +| 335|0x000000009af00000, 0x000000009af00000, 0x000000009b000000| 0%| F| |TAMS 0x000000009af00000, 0x000000009af00000| Untracked +| 336|0x000000009b000000, 0x000000009b000000, 0x000000009b100000| 0%| F| |TAMS 0x000000009b000000, 0x000000009b000000| Untracked +| 337|0x000000009b100000, 0x000000009b100000, 0x000000009b200000| 0%| F| |TAMS 0x000000009b100000, 0x000000009b100000| Untracked +| 338|0x000000009b200000, 0x000000009b200000, 0x000000009b300000| 0%| F| |TAMS 0x000000009b200000, 0x000000009b200000| Untracked +| 339|0x000000009b300000, 0x000000009b300000, 0x000000009b400000| 0%| F| |TAMS 0x000000009b300000, 0x000000009b300000| Untracked +| 340|0x000000009b400000, 0x000000009b400000, 0x000000009b500000| 0%| F| |TAMS 0x000000009b400000, 0x000000009b400000| Untracked +| 341|0x000000009b500000, 0x000000009b500000, 0x000000009b600000| 0%| F| |TAMS 0x000000009b500000, 0x000000009b500000| Untracked +| 342|0x000000009b600000, 0x000000009b600000, 0x000000009b700000| 0%| F| |TAMS 0x000000009b600000, 0x000000009b600000| Untracked +| 343|0x000000009b700000, 0x000000009b700000, 0x000000009b800000| 0%| F| |TAMS 0x000000009b700000, 0x000000009b700000| Untracked +| 344|0x000000009b800000, 0x000000009b800000, 0x000000009b900000| 0%| F| |TAMS 0x000000009b800000, 0x000000009b800000| Untracked +| 345|0x000000009b900000, 0x000000009b900000, 0x000000009ba00000| 0%| F| |TAMS 0x000000009b900000, 0x000000009b900000| Untracked +| 346|0x000000009ba00000, 0x000000009ba00000, 0x000000009bb00000| 0%| F| |TAMS 0x000000009ba00000, 0x000000009ba00000| Untracked +| 347|0x000000009bb00000, 0x000000009bb00000, 0x000000009bc00000| 0%| F| |TAMS 0x000000009bb00000, 0x000000009bb00000| Untracked +| 348|0x000000009bc00000, 0x000000009bc00000, 0x000000009bd00000| 0%| F| |TAMS 0x000000009bc00000, 0x000000009bc00000| Untracked +| 349|0x000000009bd00000, 0x000000009bd00000, 0x000000009be00000| 0%| F| |TAMS 0x000000009bd00000, 0x000000009bd00000| Untracked +| 350|0x000000009be00000, 0x000000009be00000, 0x000000009bf00000| 0%| F| |TAMS 0x000000009be00000, 0x000000009be00000| Untracked +| 351|0x000000009bf00000, 0x000000009bf00000, 0x000000009c000000| 0%| F| |TAMS 0x000000009bf00000, 0x000000009bf00000| Untracked +| 352|0x000000009c000000, 0x000000009c000000, 0x000000009c100000| 0%| F| |TAMS 0x000000009c000000, 0x000000009c000000| Untracked +| 353|0x000000009c100000, 0x000000009c100000, 0x000000009c200000| 0%| F| |TAMS 0x000000009c100000, 0x000000009c100000| Untracked +| 354|0x000000009c200000, 0x000000009c200000, 0x000000009c300000| 0%| F| |TAMS 0x000000009c200000, 0x000000009c200000| Untracked +| 355|0x000000009c300000, 0x000000009c300000, 0x000000009c400000| 0%| F| |TAMS 0x000000009c300000, 0x000000009c300000| Untracked +| 356|0x000000009c400000, 0x000000009c400000, 0x000000009c500000| 0%| F| |TAMS 0x000000009c400000, 0x000000009c400000| Untracked +| 357|0x000000009c500000, 0x000000009c500000, 0x000000009c600000| 0%| F| |TAMS 0x000000009c500000, 0x000000009c500000| Untracked +| 358|0x000000009c600000, 0x000000009c600000, 0x000000009c700000| 0%| F| |TAMS 0x000000009c600000, 0x000000009c600000| Untracked +| 359|0x000000009c700000, 0x000000009c700000, 0x000000009c800000| 0%| F| |TAMS 0x000000009c700000, 0x000000009c700000| Untracked +| 360|0x000000009c800000, 0x000000009c800000, 0x000000009c900000| 0%| F| |TAMS 0x000000009c800000, 0x000000009c800000| Untracked +| 361|0x000000009c900000, 0x000000009c900000, 0x000000009ca00000| 0%| F| |TAMS 0x000000009c900000, 0x000000009c900000| Untracked +| 362|0x000000009ca00000, 0x000000009ca00000, 0x000000009cb00000| 0%| F| |TAMS 0x000000009ca00000, 0x000000009ca00000| Untracked +| 363|0x000000009cb00000, 0x000000009cb00000, 0x000000009cc00000| 0%| F| |TAMS 0x000000009cb00000, 0x000000009cb00000| Untracked +| 364|0x000000009cc00000, 0x000000009cc00000, 0x000000009cd00000| 0%| F| |TAMS 0x000000009cc00000, 0x000000009cc00000| Untracked +| 365|0x000000009cd00000, 0x000000009cd00000, 0x000000009ce00000| 0%| F| |TAMS 0x000000009cd00000, 0x000000009cd00000| Untracked +| 366|0x000000009ce00000, 0x000000009ce00000, 0x000000009cf00000| 0%| F| |TAMS 0x000000009ce00000, 0x000000009ce00000| Untracked +| 367|0x000000009cf00000, 0x000000009cf00000, 0x000000009d000000| 0%| F| |TAMS 0x000000009cf00000, 0x000000009cf00000| Untracked +| 368|0x000000009d000000, 0x000000009d000000, 0x000000009d100000| 0%| F| |TAMS 0x000000009d000000, 0x000000009d000000| Untracked +| 369|0x000000009d100000, 0x000000009d100000, 0x000000009d200000| 0%| F| |TAMS 0x000000009d100000, 0x000000009d100000| Untracked +| 370|0x000000009d200000, 0x000000009d200000, 0x000000009d300000| 0%| F| |TAMS 0x000000009d200000, 0x000000009d200000| Untracked +| 371|0x000000009d300000, 0x000000009d300000, 0x000000009d400000| 0%| F| |TAMS 0x000000009d300000, 0x000000009d300000| Untracked +| 372|0x000000009d400000, 0x000000009d400000, 0x000000009d500000| 0%| F| |TAMS 0x000000009d400000, 0x000000009d400000| Untracked +| 373|0x000000009d500000, 0x000000009d500000, 0x000000009d600000| 0%| F| |TAMS 0x000000009d500000, 0x000000009d500000| Untracked +| 374|0x000000009d600000, 0x000000009d600000, 0x000000009d700000| 0%| F| |TAMS 0x000000009d600000, 0x000000009d600000| Untracked +| 375|0x000000009d700000, 0x000000009d700000, 0x000000009d800000| 0%| F| |TAMS 0x000000009d700000, 0x000000009d700000| Untracked +| 376|0x000000009d800000, 0x000000009d800000, 0x000000009d900000| 0%| F| |TAMS 0x000000009d800000, 0x000000009d800000| Untracked +| 377|0x000000009d900000, 0x000000009d900000, 0x000000009da00000| 0%| F| |TAMS 0x000000009d900000, 0x000000009d900000| Untracked +| 378|0x000000009da00000, 0x000000009da00000, 0x000000009db00000| 0%| F| |TAMS 0x000000009da00000, 0x000000009da00000| Untracked +| 379|0x000000009db00000, 0x000000009db00000, 0x000000009dc00000| 0%| F| |TAMS 0x000000009db00000, 0x000000009db00000| Untracked +| 380|0x000000009dc00000, 0x000000009dc00000, 0x000000009dd00000| 0%| F| |TAMS 0x000000009dc00000, 0x000000009dc00000| Untracked +| 381|0x000000009dd00000, 0x000000009dd00000, 0x000000009de00000| 0%| F| |TAMS 0x000000009dd00000, 0x000000009dd00000| Untracked +| 382|0x000000009de00000, 0x000000009de00000, 0x000000009df00000| 0%| F| |TAMS 0x000000009de00000, 0x000000009de00000| Untracked +| 383|0x000000009df00000, 0x000000009df00000, 0x000000009e000000| 0%| F| |TAMS 0x000000009df00000, 0x000000009df00000| Untracked +| 384|0x000000009e000000, 0x000000009e000000, 0x000000009e100000| 0%| F| |TAMS 0x000000009e000000, 0x000000009e000000| Untracked +| 385|0x000000009e100000, 0x000000009e100000, 0x000000009e200000| 0%| F| |TAMS 0x000000009e100000, 0x000000009e100000| Untracked +| 386|0x000000009e200000, 0x000000009e200000, 0x000000009e300000| 0%| F| |TAMS 0x000000009e200000, 0x000000009e200000| Untracked +| 387|0x000000009e300000, 0x000000009e300000, 0x000000009e400000| 0%| F| |TAMS 0x000000009e300000, 0x000000009e300000| Untracked +| 388|0x000000009e400000, 0x000000009e400000, 0x000000009e500000| 0%| F| |TAMS 0x000000009e400000, 0x000000009e400000| Untracked +| 389|0x000000009e500000, 0x000000009e500000, 0x000000009e600000| 0%| F| |TAMS 0x000000009e500000, 0x000000009e500000| Untracked +| 390|0x000000009e600000, 0x000000009e600000, 0x000000009e700000| 0%| F| |TAMS 0x000000009e600000, 0x000000009e600000| Untracked +| 391|0x000000009e700000, 0x000000009e700000, 0x000000009e800000| 0%| F| |TAMS 0x000000009e700000, 0x000000009e700000| Untracked +| 392|0x000000009e800000, 0x000000009e800000, 0x000000009e900000| 0%| F| |TAMS 0x000000009e800000, 0x000000009e800000| Untracked +| 393|0x000000009e900000, 0x000000009e900000, 0x000000009ea00000| 0%| F| |TAMS 0x000000009e900000, 0x000000009e900000| Untracked +| 394|0x000000009ea00000, 0x000000009ea00000, 0x000000009eb00000| 0%| F| |TAMS 0x000000009ea00000, 0x000000009ea00000| Untracked +| 395|0x000000009eb00000, 0x000000009eb00000, 0x000000009ec00000| 0%| F| |TAMS 0x000000009eb00000, 0x000000009eb00000| Untracked +| 396|0x000000009ec00000, 0x000000009ec00000, 0x000000009ed00000| 0%| F| |TAMS 0x000000009ec00000, 0x000000009ec00000| Untracked +| 397|0x000000009ed00000, 0x000000009ed00000, 0x000000009ee00000| 0%| F| |TAMS 0x000000009ed00000, 0x000000009ed00000| Untracked +| 398|0x000000009ee00000, 0x000000009ee00000, 0x000000009ef00000| 0%| F| |TAMS 0x000000009ee00000, 0x000000009ee00000| Untracked +| 399|0x000000009ef00000, 0x000000009ef00000, 0x000000009f000000| 0%| F| |TAMS 0x000000009ef00000, 0x000000009ef00000| Untracked +| 400|0x000000009f000000, 0x000000009f000000, 0x000000009f100000| 0%| F| |TAMS 0x000000009f000000, 0x000000009f000000| Untracked +| 401|0x000000009f100000, 0x000000009f100000, 0x000000009f200000| 0%| F| |TAMS 0x000000009f100000, 0x000000009f100000| Untracked +| 402|0x000000009f200000, 0x000000009f200000, 0x000000009f300000| 0%| F| |TAMS 0x000000009f200000, 0x000000009f200000| Untracked +| 403|0x000000009f300000, 0x000000009f300000, 0x000000009f400000| 0%| F| |TAMS 0x000000009f300000, 0x000000009f300000| Untracked +| 404|0x000000009f400000, 0x000000009f400000, 0x000000009f500000| 0%| F| |TAMS 0x000000009f400000, 0x000000009f400000| Untracked +| 405|0x000000009f500000, 0x000000009f500000, 0x000000009f600000| 0%| F| |TAMS 0x000000009f500000, 0x000000009f500000| Untracked +| 406|0x000000009f600000, 0x000000009f600000, 0x000000009f700000| 0%| F| |TAMS 0x000000009f600000, 0x000000009f600000| Untracked +| 407|0x000000009f700000, 0x000000009f700000, 0x000000009f800000| 0%| F| |TAMS 0x000000009f700000, 0x000000009f700000| Untracked +| 408|0x000000009f800000, 0x000000009f800000, 0x000000009f900000| 0%| F| |TAMS 0x000000009f800000, 0x000000009f800000| Untracked +| 409|0x000000009f900000, 0x000000009f900000, 0x000000009fa00000| 0%| F| |TAMS 0x000000009f900000, 0x000000009f900000| Untracked +| 410|0x000000009fa00000, 0x000000009fa00000, 0x000000009fb00000| 0%| F| |TAMS 0x000000009fa00000, 0x000000009fa00000| Untracked +| 411|0x000000009fb00000, 0x000000009fb00000, 0x000000009fc00000| 0%| F| |TAMS 0x000000009fb00000, 0x000000009fb00000| Untracked +| 412|0x000000009fc00000, 0x000000009fc00000, 0x000000009fd00000| 0%| F| |TAMS 0x000000009fc00000, 0x000000009fc00000| Untracked +| 413|0x000000009fd00000, 0x000000009fd00000, 0x000000009fe00000| 0%| F| |TAMS 0x000000009fd00000, 0x000000009fd00000| Untracked +| 414|0x000000009fe00000, 0x000000009fe00000, 0x000000009ff00000| 0%| F| |TAMS 0x000000009fe00000, 0x000000009fe00000| Untracked +| 415|0x000000009ff00000, 0x000000009ff00000, 0x00000000a0000000| 0%| F| |TAMS 0x000000009ff00000, 0x000000009ff00000| Untracked +| 416|0x00000000a0000000, 0x00000000a0000000, 0x00000000a0100000| 0%| F| |TAMS 0x00000000a0000000, 0x00000000a0000000| Untracked +| 417|0x00000000a0100000, 0x00000000a0100000, 0x00000000a0200000| 0%| F| |TAMS 0x00000000a0100000, 0x00000000a0100000| Untracked +| 418|0x00000000a0200000, 0x00000000a0200000, 0x00000000a0300000| 0%| F| |TAMS 0x00000000a0200000, 0x00000000a0200000| Untracked +| 419|0x00000000a0300000, 0x00000000a0300000, 0x00000000a0400000| 0%| F| |TAMS 0x00000000a0300000, 0x00000000a0300000| Untracked +| 420|0x00000000a0400000, 0x00000000a0400000, 0x00000000a0500000| 0%| F| |TAMS 0x00000000a0400000, 0x00000000a0400000| Untracked +| 421|0x00000000a0500000, 0x00000000a0500000, 0x00000000a0600000| 0%| F| |TAMS 0x00000000a0500000, 0x00000000a0500000| Untracked +| 422|0x00000000a0600000, 0x00000000a0600000, 0x00000000a0700000| 0%| F| |TAMS 0x00000000a0600000, 0x00000000a0600000| Untracked +| 423|0x00000000a0700000, 0x00000000a0700000, 0x00000000a0800000| 0%| F| |TAMS 0x00000000a0700000, 0x00000000a0700000| Untracked +| 424|0x00000000a0800000, 0x00000000a0800000, 0x00000000a0900000| 0%| F| |TAMS 0x00000000a0800000, 0x00000000a0800000| Untracked +| 425|0x00000000a0900000, 0x00000000a0900000, 0x00000000a0a00000| 0%| F| |TAMS 0x00000000a0900000, 0x00000000a0900000| Untracked +| 426|0x00000000a0a00000, 0x00000000a0a00000, 0x00000000a0b00000| 0%| F| |TAMS 0x00000000a0a00000, 0x00000000a0a00000| Untracked +| 427|0x00000000a0b00000, 0x00000000a0b00000, 0x00000000a0c00000| 0%| F| |TAMS 0x00000000a0b00000, 0x00000000a0b00000| Untracked +| 428|0x00000000a0c00000, 0x00000000a0c00000, 0x00000000a0d00000| 0%| F| |TAMS 0x00000000a0c00000, 0x00000000a0c00000| Untracked +| 429|0x00000000a0d00000, 0x00000000a0d00000, 0x00000000a0e00000| 0%| F| |TAMS 0x00000000a0d00000, 0x00000000a0d00000| Untracked +| 430|0x00000000a0e00000, 0x00000000a0e00000, 0x00000000a0f00000| 0%| F| |TAMS 0x00000000a0e00000, 0x00000000a0e00000| Untracked +| 431|0x00000000a0f00000, 0x00000000a0f00000, 0x00000000a1000000| 0%| F| |TAMS 0x00000000a0f00000, 0x00000000a0f00000| Untracked +| 432|0x00000000a1000000, 0x00000000a1000000, 0x00000000a1100000| 0%| F| |TAMS 0x00000000a1000000, 0x00000000a1000000| Untracked +| 433|0x00000000a1100000, 0x00000000a1100000, 0x00000000a1200000| 0%| F| |TAMS 0x00000000a1100000, 0x00000000a1100000| Untracked +| 434|0x00000000a1200000, 0x00000000a1200000, 0x00000000a1300000| 0%| F| |TAMS 0x00000000a1200000, 0x00000000a1200000| Untracked +| 435|0x00000000a1300000, 0x00000000a1300000, 0x00000000a1400000| 0%| F| |TAMS 0x00000000a1300000, 0x00000000a1300000| Untracked +| 436|0x00000000a1400000, 0x00000000a1400000, 0x00000000a1500000| 0%| F| |TAMS 0x00000000a1400000, 0x00000000a1400000| Untracked +| 437|0x00000000a1500000, 0x00000000a1500000, 0x00000000a1600000| 0%| F| |TAMS 0x00000000a1500000, 0x00000000a1500000| Untracked +| 438|0x00000000a1600000, 0x00000000a1600000, 0x00000000a1700000| 0%| F| |TAMS 0x00000000a1600000, 0x00000000a1600000| Untracked +| 439|0x00000000a1700000, 0x00000000a1800000, 0x00000000a1800000|100%| S|CS|TAMS 0x00000000a1700000, 0x00000000a1700000| Complete +| 440|0x00000000a1800000, 0x00000000a1800000, 0x00000000a1900000| 0%| F| |TAMS 0x00000000a1800000, 0x00000000a1800000| Untracked +| 441|0x00000000a1900000, 0x00000000a1900000, 0x00000000a1a00000| 0%| F| |TAMS 0x00000000a1900000, 0x00000000a1900000| Untracked +| 442|0x00000000a1a00000, 0x00000000a1b00000, 0x00000000a1b00000|100%| S|CS|TAMS 0x00000000a1a00000, 0x00000000a1a00000| Complete +| 443|0x00000000a1b00000, 0x00000000a1b00000, 0x00000000a1c00000| 0%| F| |TAMS 0x00000000a1b00000, 0x00000000a1b00000| Untracked +| 444|0x00000000a1c00000, 0x00000000a1c00000, 0x00000000a1d00000| 0%| F| |TAMS 0x00000000a1c00000, 0x00000000a1c00000| Untracked +| 445|0x00000000a1d00000, 0x00000000a1d00000, 0x00000000a1e00000| 0%| F| |TAMS 0x00000000a1d00000, 0x00000000a1d00000| Untracked +| 446|0x00000000a1e00000, 0x00000000a1e00000, 0x00000000a1f00000| 0%| F| |TAMS 0x00000000a1e00000, 0x00000000a1e00000| Untracked +| 447|0x00000000a1f00000, 0x00000000a1f00000, 0x00000000a2000000| 0%| F| |TAMS 0x00000000a1f00000, 0x00000000a1f00000| Untracked +| 448|0x00000000a2000000, 0x00000000a2000000, 0x00000000a2100000| 0%| F| |TAMS 0x00000000a2000000, 0x00000000a2000000| Untracked +| 449|0x00000000a2100000, 0x00000000a2100000, 0x00000000a2200000| 0%| F| |TAMS 0x00000000a2100000, 0x00000000a2100000| Untracked +| 450|0x00000000a2200000, 0x00000000a2200000, 0x00000000a2300000| 0%| F| |TAMS 0x00000000a2200000, 0x00000000a2200000| Untracked +| 451|0x00000000a2300000, 0x00000000a2300000, 0x00000000a2400000| 0%| F| |TAMS 0x00000000a2300000, 0x00000000a2300000| Untracked +| 452|0x00000000a2400000, 0x00000000a2400000, 0x00000000a2500000| 0%| F| |TAMS 0x00000000a2400000, 0x00000000a2400000| Untracked +| 453|0x00000000a2500000, 0x00000000a2500000, 0x00000000a2600000| 0%| F| |TAMS 0x00000000a2500000, 0x00000000a2500000| Untracked +| 454|0x00000000a2600000, 0x00000000a2600000, 0x00000000a2700000| 0%| F| |TAMS 0x00000000a2600000, 0x00000000a2600000| Untracked +| 455|0x00000000a2700000, 0x00000000a2700000, 0x00000000a2800000| 0%| F| |TAMS 0x00000000a2700000, 0x00000000a2700000| Untracked +| 456|0x00000000a2800000, 0x00000000a2800000, 0x00000000a2900000| 0%| F| |TAMS 0x00000000a2800000, 0x00000000a2800000| Untracked +| 457|0x00000000a2900000, 0x00000000a2900000, 0x00000000a2a00000| 0%| F| |TAMS 0x00000000a2900000, 0x00000000a2900000| Untracked +| 458|0x00000000a2a00000, 0x00000000a2a00000, 0x00000000a2b00000| 0%| F| |TAMS 0x00000000a2a00000, 0x00000000a2a00000| Untracked +| 459|0x00000000a2b00000, 0x00000000a2b00000, 0x00000000a2c00000| 0%| F| |TAMS 0x00000000a2b00000, 0x00000000a2b00000| Untracked +| 460|0x00000000a2c00000, 0x00000000a2c00000, 0x00000000a2d00000| 0%| F| |TAMS 0x00000000a2c00000, 0x00000000a2c00000| Untracked +| 461|0x00000000a2d00000, 0x00000000a2d00000, 0x00000000a2e00000| 0%| F| |TAMS 0x00000000a2d00000, 0x00000000a2d00000| Untracked +| 462|0x00000000a2e00000, 0x00000000a2e00000, 0x00000000a2f00000| 0%| F| |TAMS 0x00000000a2e00000, 0x00000000a2e00000| Untracked + +Card table byte_map: [0x00007fe2c83fc000,0x00007fe2c87cc000] _byte_map_base: 0x00007fe2c7fcc000 + +Marking Bits (Prev, Next): (CMBitMap*) 0x00007fe2cc084320, (CMBitMap*) 0x00007fe2cc0842e0 + Prev Bits: [0x00007fe2c432c000, 0x00007fe2c61ac000) + Next Bits: [0x00007fe2c61ac000, 0x00007fe2c802c000) + +Polling page: 0x00007fe2d4479000 + +Metaspace: + +Usage: + Non-class: 30.69 MB used. + Class: 4.63 MB used. + Both: 35.32 MB used. + +Virtual space: + Non-class space: 32.00 MB reserved, 30.88 MB ( 96%) committed, 4 nodes. + Class space: 1.00 GB reserved, 4.81 MB ( <1%) committed, 1 nodes. + Both: 1.03 GB reserved, 35.69 MB ( 3%) committed. + +Chunk freelists: + Non-Class: 1.08 MB + Class: 3.05 MB + Both: 4.12 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 59.00 MB +CDS: off +MetaspaceReclaimPolicy: balanced + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 1048576. + - enlarge_chunks_in_place: 1. + - new_chunks_are_fully_committed: 0. + - uncommit_free_chunks: 1. + - use_allocation_guard: 0. + - handle_deallocations: 1. + + +Internal statistics: + +num_allocs_failed_limit: 3. +num_arena_births: 336. +num_arena_deaths: 0. +num_vsnodes_births: 5. +num_vsnodes_deaths: 0. +num_space_committed: 571. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 3. +num_chunks_taken_from_freelist: 1366. +num_chunk_merges: 3. +num_chunk_splits: 933. +num_chunks_enlarged: 736. +num_purges: 0. +num_inconsistent_stats: 0. + +CodeCache: size=49152Kb used=7167Kb max_used=7705Kb free=41984Kb + bounds [0x00007fe2c9000000, 0x00007fe2c9790000, 0x00007fe2cc000000] + total_blobs=4143 nmethods=3628 adapters=444 + compilation: enabled + stopped_count=0, restarted_count=0 + full_count=0 + +Compilation events (20 events): +Event: 51.312 Thread 0x00007fe2cc1a8e10 3638 1 java.lang.invoke.MethodTypeForm:: (322 bytes) +Event: 51.314 Thread 0x00007fe2cc1a8e10 nmethod 3638 0x00007fe2c9348e10 code [0x00007fe2c9349040, 0x00007fe2c9349a60] +Event: 51.314 Thread 0x00007fe2cc1a8e10 3637 1 java.lang.invoke.BoundMethodHandle$Species_L:: (12 bytes) +Event: 51.315 Thread 0x00007fe2cc1a8e10 nmethod 3637 0x00007fe2c9348a90 code [0x00007fe2c9348c40, 0x00007fe2c9348d80] +Event: 51.321 Thread 0x00007fe2cc1a8e10 3639 1 java.util.regex.Pattern::newSlice (181 bytes) +Event: 51.322 Thread 0x00007fe2cc1a8e10 nmethod 3639 0x00007fe2c9347b10 code [0x00007fe2c9347d80, 0x00007fe2c9348690] +Event: 51.358 Thread 0x00007fe2cc1a8e10 3640 1 java.util.concurrent.locks.ReentrantLock$NonfairSync::tryAcquire (27 bytes) +Event: 51.359 Thread 0x00007fe2cc1a8e10 nmethod 3640 0x00007fe2c9347790 code [0x00007fe2c9347920, 0x00007fe2c9347a90] +Event: 73.581 Thread 0x00007fe2cc1a8e10 3641 1 io.github.classgraph.ModuleRef::getReference (5 bytes) +Event: 73.581 Thread 0x00007fe2cc1a8e10 nmethod 3641 0x00007fe2c9347490 code [0x00007fe2c9347620, 0x00007fe2c93476f0] +Event: 77.383 Thread 0x00007fe2cc1a8e10 3642 1 jdk.internal.module.SystemModuleFinders$2::get (5 bytes) +Event: 77.384 Thread 0x00007fe2cc1a8e10 nmethod 3642 0x00007fe2c9347090 code [0x00007fe2c9347240, 0x00007fe2c93473c0] +Event: 77.384 Thread 0x00007fe2cc1a8e10 3643 ! 1 jdk.internal.module.ModuleReferenceImpl::open (19 bytes) +Event: 77.384 Thread 0x00007fe2cc1a8e10 nmethod 3643 0x00007fe2c9346c10 code [0x00007fe2c9346dc0, 0x00007fe2c9346f50] +Event: 77.385 Thread 0x00007fe2cc1a8e10 3644 ! 1 jdk.internal.module.SystemModuleFinders$SystemModuleReader::checkPermissionToConnect (38 bytes) +Event: 77.386 Thread 0x00007fe2cc1a8e10 nmethod 3644 0x00007fe2c9346610 code [0x00007fe2c93467e0, 0x00007fe2c93469e0] +Event: 77.387 Thread 0x00007fe2cc1a8e10 3645 1 jdk.internal.module.SystemModuleFinders$SystemModuleReader:: (14 bytes) +Event: 77.388 Thread 0x00007fe2cc1a8e10 nmethod 3645 0x00007fe2c9346290 code [0x00007fe2c9346440, 0x00007fe2c9346580] +Event: 92.893 Thread 0x00007fe2cc1a8e10 3646 1 com.google.gson.stream.JsonReader::nextName (116 bytes) +Event: 92.894 Thread 0x00007fe2cc1a8e10 nmethod 3646 0x00007fe2c9345710 code [0x00007fe2c9345960, 0x00007fe2c9345f40] + +GC Heap History (20 events): +Event: 49.130 GC heap after +{Heap after GC invocations=22 (full 0): + garbage-first heap total 163840K, used 71921K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 2 young (2048K), 2 survivors (2048K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 49.191 GC heap before +{Heap before GC invocations=22 (full 0): + garbage-first heap total 163840K, used 116977K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 48 young (49152K), 2 survivors (2048K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 49.198 GC heap after +{Heap after GC invocations=23 (full 0): + garbage-first heap total 163840K, used 73917K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 4 young (4096K), 4 survivors (4096K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 49.250 GC heap before +{Heap before GC invocations=23 (full 0): + garbage-first heap total 163840K, used 121021K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 51 young (52224K), 4 survivors (4096K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 49.261 GC heap after +{Heap after GC invocations=24 (full 0): + garbage-first heap total 474112K, used 75803K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 4 young (4096K), 4 survivors (4096K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 50.703 GC heap before +{Heap before GC invocations=24 (full 0): + garbage-first heap total 474112K, used 277531K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 203 young (207872K), 4 survivors (4096K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 50.735 GC heap after +{Heap after GC invocations=25 (full 0): + garbage-first heap total 474112K, used 83574K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 12 young (12288K), 12 survivors (12288K) + Metaspace used 36068K, committed 36352K, reserved 1081344K + class space used 4722K, committed 4864K, reserved 1048576K +} +Event: 57.283 GC heap before +{Heap before GC invocations=25 (full 0): + garbage-first heap total 474112K, used 353910K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 277 young (283648K), 12 survivors (12288K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 57.310 GC heap after +{Heap after GC invocations=26 (full 0): + garbage-first heap total 474112K, used 95238K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 23 young (23552K), 23 survivors (23552K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 74.332 GC heap before +{Heap before GC invocations=26 (full 0): + garbage-first heap total 474112K, used 354310K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 277 young (283648K), 23 survivors (23552K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 74.362 GC heap after +{Heap after GC invocations=27 (full 0): + garbage-first heap total 474112K, used 105246K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 22 young (22528K), 22 survivors (22528K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 78.322 GC heap before +{Heap before GC invocations=27 (full 0): + garbage-first heap total 474112K, used 365342K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 278 young (284672K), 22 survivors (22528K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 84.416 GC heap after +{Heap after GC invocations=28 (full 0): + garbage-first heap total 474112K, used 115996K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 21 young (21504K), 21 survivors (21504K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 84.418 GC heap before +{Heap before GC invocations=28 (full 0): + garbage-first heap total 474112K, used 117020K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 23 young (23552K), 21 survivors (21504K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 89.140 GC heap after +{Heap after GC invocations=29 (full 0): + garbage-first heap total 474112K, used 117207K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 2 young (2048K), 2 survivors (2048K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 102.347 GC heap before +{Heap before GC invocations=29 (full 0): + garbage-first heap total 474112K, used 137687K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 23 young (23552K), 2 survivors (2048K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 102.372 GC heap after +{Heap after GC invocations=30 (full 0): + garbage-first heap total 474112K, used 116962K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 2 young (2048K), 2 survivors (2048K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 102.391 GC heap before +{Heap before GC invocations=30 (full 0): + garbage-first heap total 474112K, used 137442K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 23 young (23552K), 2 survivors (2048K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 102.394 GC heap after +{Heap after GC invocations=31 (full 0): + garbage-first heap total 474112K, used 117415K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 3 young (3072K), 3 survivors (3072K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} +Event: 111.963 GC heap before +{Heap before GC invocations=31 (full 0): + garbage-first heap total 474112K, used 136871K [0x0000000086000000, 0x0000000100000000) + region size 1024K, 23 young (23552K), 3 survivors (3072K) + Metaspace used 36165K, committed 36544K, reserved 1081344K + class space used 4740K, committed 4928K, reserved 1048576K +} + +Dll operation events (8 events): +Event: 0.316 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +Event: 4.321 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +Event: 4.345 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libzip.so +Event: 24.002 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libverify.so +Event: 24.051 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjimage.so +Event: 24.541 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnet.so +Event: 30.478 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement.so +Event: 30.486 Loaded shared library /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so + +Deoptimization events (8 events): +Event: 32.251 Thread 0x00007fe2cc02b420 DEOPT PACKING pc=0x00007fe2c94ac479 sp=0x00007fe2d2db87d0 +Event: 32.251 Thread 0x00007fe2cc02b420 DEOPT UNPACKING pc=0x00007fe2c9052810 sp=0x00007fe2d2db7cd0 mode 3 +Event: 41.035 Thread 0x00007fe2540308d0 DEOPT PACKING pc=0x00007fe2c96cc5c5 sp=0x00007fe27defbb60 +Event: 41.035 Thread 0x00007fe2540308d0 DEOPT UNPACKING pc=0x00007fe2c9052810 sp=0x00007fe27defb098 mode 3 +Event: 46.701 Thread 0x00007fe260027240 DEOPT PACKING pc=0x00007fe2c94a9c79 sp=0x00007fe27dffd2c0 +Event: 46.701 Thread 0x00007fe260027240 DEOPT UNPACKING pc=0x00007fe2c9052810 sp=0x00007fe27dffc770 mode 3 +Event: 47.105 Thread 0x00007fe2540568a0 DEOPT PACKING pc=0x00007fe2c956518b sp=0x00007fe27d9f7bc0 +Event: 47.105 Thread 0x00007fe2540568a0 DEOPT UNPACKING pc=0x00007fe2c9052810 sp=0x00007fe27d9f7128 mode 3 + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 38.629 Thread 0x00007fe2cc02b420 Exception (0x000000008822b9e0) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 826] +Event: 38.846 Thread 0x00007fe2cc02b420 Exception (0x0000000087f57a20) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 38.850 Thread 0x00007fe2cc02b420 Exception (0x0000000087f69fb0) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 38.852 Thread 0x00007fe2cc02b420 Exception (0x0000000087f71db0) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 38.852 Thread 0x00007fe2cc02b420 Exception (0x0000000087f75eb0) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 41.026 Thread 0x00007fe2540308d0 Exception (0x0000000088afbbf0) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 41.206 Thread 0x00007fe2540308d0 Exception (0x00000000886d2e70) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 41.207 Thread 0x00007fe2540308d0 Exception (0x00000000886d6518) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 46.642 Thread 0x00007fe260027240 Exception (0x0000000088aec8c8) +thrown [src/hotspot/share/interpreter/linkResolver.cpp, line 758] +Event: 47.224 Thread 0x00007fe244003a30 Exception (0x000000008bc1e718) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc1ec90) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc1f210) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc1f778) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc1fcb8) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc201f0) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc20728) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc20c60) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.225 Thread 0x00007fe244003a30 Exception (0x000000008bc211b8) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.226 Thread 0x00007fe244003a30 Exception (0x000000008bc21720) +thrown [src/hotspot/share/prims/jni.cpp, line 516] +Event: 47.226 Thread 0x00007fe244003a30 Exception (0x000000008bc21c80) +thrown [src/hotspot/share/prims/jni.cpp, line 516] + +VM Operations (20 events): +Event: 57.310 Executing VM operation: G1CollectForAllocation done +Event: 73.600 Executing VM operation: G1CollectForAllocation +Event: 74.332 Executing VM operation: G1CollectForAllocation done +Event: 74.332 Executing VM operation: G1CollectForAllocation +Event: 74.362 Executing VM operation: G1CollectForAllocation done +Event: 77.457 Executing VM operation: G1CollectForAllocation +Event: 78.322 Executing VM operation: G1CollectForAllocation done +Event: 78.322 Executing VM operation: G1CollectForAllocation +Event: 84.416 Executing VM operation: G1CollectForAllocation done +Event: 84.418 Executing VM operation: G1CollectForAllocation +Event: 89.140 Executing VM operation: G1CollectForAllocation done +Event: 94.174 Executing VM operation: G1CollectForAllocation +Event: 102.035 Executing VM operation: G1CollectForAllocation done +Event: 102.036 Executing VM operation: G1CollectForAllocation +Event: 102.372 Executing VM operation: G1CollectForAllocation done +Event: 102.390 Executing VM operation: G1CollectForAllocation +Event: 102.391 Executing VM operation: G1CollectForAllocation done +Event: 102.391 Executing VM operation: G1CollectForAllocation +Event: 102.394 Executing VM operation: G1CollectForAllocation done +Event: 103.474 Executing VM operation: G1CollectForAllocation + +Events (20 events): +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$Sync +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$Sync done +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$FairSync done +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter done +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock +Event: 48.057 loading class java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock done +Event: 48.058 loading class java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock +Event: 48.058 loading class java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock done +Event: 48.058 loading class sun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator +Event: 48.058 loading class sun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator done +Event: 50.700 Thread 0x00007fe294012020 Thread exited: 0x00007fe294012020 +Event: 51.299 loading class java/io/PrintWriter +Event: 51.302 loading class java/io/PrintWriter done +Event: 51.319 loading class java/util/WeakHashMap$EntrySet +Event: 51.319 loading class java/util/WeakHashMap$EntrySet done +Event: 51.319 loading class java/util/WeakHashMap$EntryIterator +Event: 51.319 loading class java/util/WeakHashMap$HashIterator +Event: 51.319 loading class java/util/WeakHashMap$HashIterator done +Event: 51.319 loading class java/util/WeakHashMap$EntryIterator done + + +Dynamic libraries: +86000000-a2f00000 rw-p 00000000 00:00 0 +c8300000-100000000 ---p 00000000 00:00 0 +100000000-100020000 rw-p 00000000 00:00 0 +100020000-100040000 rw-p 00000000 00:00 0 +100040000-1000c0000 rw-p 00000000 00:00 0 +1000c0000-100100000 rw-p 00000000 00:00 0 +100100000-100140000 rw-p 00000000 00:00 0 +100140000-100180000 rw-p 00000000 00:00 0 +100180000-1001c0000 rw-p 00000000 00:00 0 +1001c0000-100240000 rw-p 00000000 00:00 0 +100240000-100280000 rw-p 00000000 00:00 0 +100280000-1004c0000 rw-p 00000000 00:00 0 +1004c0000-1004d0000 rw-p 00000000 00:00 0 +1004d0000-140000000 ---p 00000000 00:00 0 +5621b0020000-5621b0021000 r--p 00000000 00:22 46308 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/bin/java +5621b0021000-5621b0022000 r-xp 00001000 00:22 46308 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/bin/java +5621b0022000-5621b0023000 r--p 00002000 00:22 46308 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/bin/java +5621b0023000-5621b0024000 r--p 00002000 00:22 46308 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/bin/java +5621b0024000-5621b0025000 rw-p 00003000 00:22 46308 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/bin/java +5621b09cf000-5621b0a59000 rw-p 00000000 00:00 0 [heap] +7fe244000000-7fe244073000 rw-p 00000000 00:00 0 +7fe244073000-7fe248000000 ---p 00000000 00:00 0 +7fe248000000-7fe248021000 rw-p 00000000 00:00 0 +7fe248021000-7fe24c000000 ---p 00000000 00:00 0 +7fe24c000000-7fe24c04c000 rw-p 00000000 00:00 0 +7fe24c04c000-7fe250000000 ---p 00000000 00:00 0 +7fe250000000-7fe25005f000 rw-p 00000000 00:00 0 +7fe25005f000-7fe254000000 ---p 00000000 00:00 0 +7fe254000000-7fe254070000 rw-p 00000000 00:00 0 +7fe254070000-7fe258000000 ---p 00000000 00:00 0 +7fe258000000-7fe2580a0000 rw-p 00000000 00:00 0 +7fe2580a0000-7fe25c000000 ---p 00000000 00:00 0 +7fe25c000000-7fe25c030000 rw-p 00000000 00:00 0 +7fe25c030000-7fe260000000 ---p 00000000 00:00 0 +7fe260000000-7fe2600a5000 rw-p 00000000 00:00 0 +7fe2600a5000-7fe264000000 ---p 00000000 00:00 0 +7fe264000000-7fe264021000 rw-p 00000000 00:00 0 +7fe264021000-7fe268000000 ---p 00000000 00:00 0 +7fe268000000-7fe2681ea000 rw-p 00000000 00:00 0 +7fe2681ea000-7fe26c000000 ---p 00000000 00:00 0 +7fe26c000000-7fe26c349000 rw-p 00000000 00:00 0 +7fe26c349000-7fe270000000 ---p 00000000 00:00 0 +7fe270000000-7fe27006b000 rw-p 00000000 00:00 0 +7fe27006b000-7fe274000000 ---p 00000000 00:00 0 +7fe274000000-7fe274021000 rw-p 00000000 00:00 0 +7fe274021000-7fe278000000 ---p 00000000 00:00 0 +7fe278000000-7fe278021000 rw-p 00000000 00:00 0 +7fe278021000-7fe27c000000 ---p 00000000 00:00 0 +7fe27c8ff000-7fe27ccea000 rw-p 00000000 00:00 0 +7fe27ccea000-7fe27cceb000 ---p 00000000 00:00 0 +7fe27cceb000-7fe27cdec000 rw-p 00000000 00:00 0 +7fe27cdec000-7fe27cded000 ---p 00000000 00:00 0 +7fe27cded000-7fe27ceee000 rw-p 00000000 00:00 0 +7fe27ceee000-7fe27ceef000 ---p 00000000 00:00 0 +7fe27ceef000-7fe27cff0000 rw-p 00000000 00:00 0 +7fe27cff0000-7fe27cff4000 ---p 00000000 00:00 0 +7fe27cff4000-7fe27d0f1000 rw-p 00000000 00:00 0 +7fe27d0f1000-7fe27d0f5000 ---p 00000000 00:00 0 +7fe27d0f5000-7fe27d1f2000 rw-p 00000000 00:00 0 +7fe27d1f2000-7fe27d1f6000 ---p 00000000 00:00 0 +7fe27d1f6000-7fe27d2f3000 rw-p 00000000 00:00 0 +7fe27d2f3000-7fe27d2f7000 ---p 00000000 00:00 0 +7fe27d2f7000-7fe27d3f4000 rw-p 00000000 00:00 0 +7fe27d3f4000-7fe27d3f8000 ---p 00000000 00:00 0 +7fe27d3f8000-7fe27d4f5000 rw-p 00000000 00:00 0 +7fe27d4f5000-7fe27d4f9000 ---p 00000000 00:00 0 +7fe27d4f9000-7fe27d5f6000 rw-p 00000000 00:00 0 +7fe27d5f6000-7fe27d5fa000 ---p 00000000 00:00 0 +7fe27d5fa000-7fe27d6f7000 rw-p 00000000 00:00 0 +7fe27d6f7000-7fe27d6fb000 ---p 00000000 00:00 0 +7fe27d6fb000-7fe27d7f8000 rw-p 00000000 00:00 0 +7fe27d7f8000-7fe27d7fc000 ---p 00000000 00:00 0 +7fe27d7fc000-7fe27d8f9000 rw-p 00000000 00:00 0 +7fe27d8f9000-7fe27d8fd000 ---p 00000000 00:00 0 +7fe27d8fd000-7fe27d9fa000 rw-p 00000000 00:00 0 +7fe27d9fa000-7fe27d9fe000 ---p 00000000 00:00 0 +7fe27d9fe000-7fe27dafb000 rw-p 00000000 00:00 0 +7fe27dafb000-7fe27daff000 ---p 00000000 00:00 0 +7fe27daff000-7fe27dbfc000 rw-p 00000000 00:00 0 +7fe27dbfc000-7fe27dc00000 ---p 00000000 00:00 0 +7fe27dc00000-7fe27dcfd000 rw-p 00000000 00:00 0 +7fe27dcfd000-7fe27dd01000 ---p 00000000 00:00 0 +7fe27dd01000-7fe27ddfe000 rw-p 00000000 00:00 0 +7fe27ddfe000-7fe27de02000 ---p 00000000 00:00 0 +7fe27de02000-7fe27deff000 rw-p 00000000 00:00 0 +7fe27deff000-7fe27df03000 ---p 00000000 00:00 0 +7fe27df03000-7fe27e6f0000 rw-p 00000000 00:00 0 +7fe27e6f0000-7fe27e800000 ---p 00000000 00:00 0 +7fe27e800000-7fe27ef00000 rw-p 00000000 00:00 0 +7fe27ef00000-7fe27eff0000 rw-p 00000000 00:00 0 +7fe27eff0000-7fe27f000000 ---p 00000000 00:00 0 +7fe27f0fd000-7fe27f101000 ---p 00000000 00:00 0 +7fe27f101000-7fe27f1fe000 rw-p 00000000 00:00 0 +7fe27f1fe000-7fe27f202000 ---p 00000000 00:00 0 +7fe27f202000-7fe27f2ff000 rw-p 00000000 00:00 0 +7fe27f2ff000-7fe27f303000 ---p 00000000 00:00 0 +7fe27f303000-7fe27f500000 rw-p 00000000 00:00 0 +7fe27f500000-7fe27f600000 rw-p 00000000 00:00 0 +7fe27f600000-7fe27f700000 rw-p 00000000 00:00 0 +7fe27f700000-7fe27f800000 rw-p 00000000 00:00 0 +7fe27f800000-7fe27f8c0000 rw-p 00000000 00:00 0 +7fe27f8c0000-7fe27f900000 rw-p 00000000 00:00 0 +7fe27f900000-7fe27fb00000 rw-p 00000000 00:00 0 +7fe27fb00000-7fe27fc00000 rw-p 00000000 00:00 0 +7fe27fc86000-7fe27fcfb000 rw-p 00000000 00:00 0 +7fe27fcfb000-7fe27fcfc000 ---p 00000000 00:00 0 +7fe27fcfc000-7fe27fdfd000 rw-p 00000000 00:00 0 +7fe27fdfd000-7fe27fe01000 ---p 00000000 00:00 0 +7fe27fe01000-7fe27fefe000 rw-p 00000000 00:00 0 +7fe27fefe000-7fe27feff000 ---p 00000000 00:00 0 +7fe27feff000-7fe280000000 rw-p 00000000 00:00 0 +7fe280000000-7fe280021000 rw-p 00000000 00:00 0 +7fe280021000-7fe284000000 ---p 00000000 00:00 0 +7fe284000000-7fe284021000 rw-p 00000000 00:00 0 +7fe284021000-7fe288000000 ---p 00000000 00:00 0 +7fe288000000-7fe288021000 rw-p 00000000 00:00 0 +7fe288021000-7fe28c000000 ---p 00000000 00:00 0 +7fe28c000000-7fe28c028000 rw-p 00000000 00:00 0 +7fe28c028000-7fe290000000 ---p 00000000 00:00 0 +7fe290000000-7fe290021000 rw-p 00000000 00:00 0 +7fe290021000-7fe294000000 ---p 00000000 00:00 0 +7fe294000000-7fe294563000 rw-p 00000000 00:00 0 +7fe294563000-7fe298000000 ---p 00000000 00:00 0 +7fe298000000-7fe298021000 rw-p 00000000 00:00 0 +7fe298021000-7fe29c000000 ---p 00000000 00:00 0 +7fe29c000000-7fe29c021000 rw-p 00000000 00:00 0 +7fe29c021000-7fe2a0000000 ---p 00000000 00:00 0 +7fe2a0000000-7fe2a0021000 rw-p 00000000 00:00 0 +7fe2a0021000-7fe2a4000000 ---p 00000000 00:00 0 +7fe2a4000000-7fe2a4021000 rw-p 00000000 00:00 0 +7fe2a4021000-7fe2a8000000 ---p 00000000 00:00 0 +7fe2a8000000-7fe2a8021000 rw-p 00000000 00:00 0 +7fe2a8021000-7fe2ac000000 ---p 00000000 00:00 0 +7fe2ac000000-7fe2ac0ff000 rw-p 00000000 00:00 0 +7fe2ac0ff000-7fe2b0000000 ---p 00000000 00:00 0 +7fe2b0000000-7fe2b0021000 rw-p 00000000 00:00 0 +7fe2b0021000-7fe2b4000000 ---p 00000000 00:00 0 +7fe2b4009000-7fe2b400a000 ---p 00000000 00:00 0 +7fe2b400a000-7fe2b410b000 rw-p 00000000 00:00 0 +7fe2b410b000-7fe2b410f000 ---p 00000000 00:00 0 +7fe2b410f000-7fe2b420c000 rw-p 00000000 00:00 0 +7fe2b420c000-7fe2b420d000 ---p 00000000 00:00 0 +7fe2b420d000-7fe2b430e000 rw-p 00000000 00:00 0 +7fe2b430e000-7fe2b4312000 ---p 00000000 00:00 0 +7fe2b4312000-7fe2b440f000 rw-p 00000000 00:00 0 +7fe2b440f000-7fe2b4413000 ---p 00000000 00:00 0 +7fe2b4413000-7fe2b4510000 rw-p 00000000 00:00 0 +7fe2b4510000-7fe2b4514000 ---p 00000000 00:00 0 +7fe2b4514000-7fe2b4611000 rw-p 00000000 00:00 0 +7fe2b4611000-7fe2b4615000 ---p 00000000 00:00 0 +7fe2b4615000-7fe2b4712000 rw-p 00000000 00:00 0 +7fe2b4712000-7fe2b4716000 ---p 00000000 00:00 0 +7fe2b4716000-7fe2b4813000 rw-p 00000000 00:00 0 +7fe2b4813000-7fe2b4817000 ---p 00000000 00:00 0 +7fe2b4817000-7fe2b4914000 rw-p 00000000 00:00 0 +7fe2b4914000-7fe2b4918000 ---p 00000000 00:00 0 +7fe2b4918000-7fe2b4a15000 rw-p 00000000 00:00 0 +7fe2b4a15000-7fe2b4cfc000 r--p 00000000 00:22 16947 /usr/lib/locale/locale-archive +7fe2b4cfc000-7fe2b4d00000 ---p 00000000 00:00 0 +7fe2b4d00000-7fe2b4dfd000 rw-p 00000000 00:00 0 +7fe2b4dfd000-7fe2b4e01000 ---p 00000000 00:00 0 +7fe2b4e01000-7fe2b4efe000 rw-p 00000000 00:00 0 +7fe2b4efe000-7fe2b4eff000 ---p 00000000 00:00 0 +7fe2b4eff000-7fe2b5400000 rw-p 00000000 00:00 0 +7fe2b5400000-7fe2b5480000 rw-p 00000000 00:00 0 +7fe2b5480000-7fe2b5500000 rw-p 00000000 00:00 0 +7fe2b5500000-7fe2b5700000 rw-p 00000000 00:00 0 +7fe2b5700000-7fe2b5800000 rw-p 00000000 00:00 0 +7fe2b5815000-7fe2b581c000 r--s 00000000 00:22 1305 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +7fe2b581c000-7fe2b5872000 rw-p 00000000 00:00 0 +7fe2b5872000-7fe2b5874000 r--p 00000000 00:22 46703 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so +7fe2b5874000-7fe2b5877000 r-xp 00002000 00:22 46703 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so +7fe2b5877000-7fe2b5878000 r--p 00005000 00:22 46703 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so +7fe2b5878000-7fe2b5879000 ---p 00006000 00:22 46703 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so +7fe2b5879000-7fe2b587a000 r--p 00006000 00:22 46703 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so +7fe2b587a000-7fe2b587b000 rw-p 00007000 00:22 46703 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement_ext.so +7fe2b587b000-7fe2b587e000 r--p 00000000 00:22 46704 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement.so +7fe2b587e000-7fe2b587f000 r-xp 00003000 00:22 46704 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement.so +7fe2b587f000-7fe2b5880000 r--p 00004000 00:22 46704 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement.so +7fe2b5880000-7fe2b5881000 r--p 00004000 00:22 46704 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement.so +7fe2b5881000-7fe2b5882000 rw-p 00005000 00:22 46704 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libmanagement.so +7fe2b5882000-7fe2b5886000 r--p 00000000 00:22 46713 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libverify.so +7fe2b5886000-7fe2b588d000 r-xp 00004000 00:22 46713 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libverify.so +7fe2b588d000-7fe2b588f000 r--p 0000b000 00:22 46713 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libverify.so +7fe2b588f000-7fe2b5891000 r--p 0000c000 00:22 46713 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libverify.so +7fe2b5891000-7fe2b5892000 rw-p 0000e000 00:22 46713 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libverify.so +7fe2b5892000-7fe2b58c3000 rw-p 00000000 00:00 0 +7fe2b58c3000-7fe2b58c7000 r--p 00000000 00:22 46706 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnet.so +7fe2b58c7000-7fe2b58d5000 r-xp 00004000 00:22 46706 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnet.so +7fe2b58d5000-7fe2b58d9000 r--p 00012000 00:22 46706 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnet.so +7fe2b58d9000-7fe2b58da000 r--p 00015000 00:22 46706 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnet.so +7fe2b58da000-7fe2b58db000 rw-p 00016000 00:22 46706 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnet.so +7fe2b58db000-7fe2b59f8000 rw-p 00000000 00:00 0 +7fe2b59f8000-7fe2b59f9000 ---p 00000000 00:00 0 +7fe2b59f9000-7fe2b5afa000 rw-p 00000000 00:00 0 +7fe2b5afa000-7fe2b5afb000 ---p 00000000 00:00 0 +7fe2b5afb000-7fe2b8000000 rw-p 00000000 00:00 0 +7fe2b8000000-7fe2b8021000 rw-p 00000000 00:00 0 +7fe2b8021000-7fe2bc000000 ---p 00000000 00:00 0 +7fe2bc000000-7fe2bc021000 rw-p 00000000 00:00 0 +7fe2bc021000-7fe2c0000000 ---p 00000000 00:00 0 +7fe2c0000000-7fe2c0021000 rw-p 00000000 00:00 0 +7fe2c0021000-7fe2c4000000 ---p 00000000 00:00 0 +7fe2c4005000-7fe2c400c000 r--p 00000000 00:22 46707 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +7fe2c400c000-7fe2c4015000 r-xp 00007000 00:22 46707 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +7fe2c4015000-7fe2c4019000 r--p 00010000 00:22 46707 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +7fe2c4019000-7fe2c401a000 ---p 00014000 00:22 46707 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +7fe2c401a000-7fe2c401b000 r--p 00014000 00:22 46707 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +7fe2c401b000-7fe2c401c000 rw-p 00015000 00:22 46707 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libnio.so +7fe2c401c000-7fe2c401e000 r--p 00000000 00:22 46714 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libzip.so +7fe2c401e000-7fe2c4022000 r-xp 00002000 00:22 46714 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libzip.so +7fe2c4022000-7fe2c4024000 r--p 00006000 00:22 46714 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libzip.so +7fe2c4024000-7fe2c4025000 r--p 00007000 00:22 46714 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libzip.so +7fe2c4025000-7fe2c4026000 rw-p 00008000 00:22 46714 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libzip.so +7fe2c4026000-7fe2c4027000 ---p 00000000 00:00 0 +7fe2c4027000-7fe2c4128000 rw-p 00000000 00:00 0 +7fe2c4128000-7fe2c4129000 ---p 00000000 00:00 0 +7fe2c4129000-7fe2c422a000 rw-p 00000000 00:00 0 +7fe2c422a000-7fe2c422b000 ---p 00000000 00:00 0 +7fe2c422b000-7fe2c4a68000 rw-p 00000000 00:00 0 +7fe2c4a68000-7fe2c61ac000 ---p 00000000 00:00 0 +7fe2c61ac000-7fe2c630c000 rw-p 00000000 00:00 0 +7fe2c630c000-7fe2c638c000 rw-p 00000000 00:00 0 +7fe2c638c000-7fe2c68e8000 rw-p 00000000 00:00 0 +7fe2c68e8000-7fe2c802c000 ---p 00000000 00:00 0 +7fe2c802c000-7fe2c8114000 rw-p 00000000 00:00 0 +7fe2c8114000-7fe2c83fc000 ---p 00000000 00:00 0 +7fe2c83fc000-7fe2c84e4000 rw-p 00000000 00:00 0 +7fe2c84e4000-7fe2c87cc000 ---p 00000000 00:00 0 +7fe2c87cc000-7fe2c88b4000 rw-p 00000000 00:00 0 +7fe2c88b4000-7fe2c8b9c000 ---p 00000000 00:00 0 +7fe2c8b9c000-7fe2c8fb0000 rw-p 00000000 00:00 0 +7fe2c8fb0000-7fe2c9000000 ---p 00000000 00:00 0 +7fe2c9000000-7fe2c9790000 rwxp 00000000 00:00 0 +7fe2c9790000-7fe2cc000000 ---p 00000000 00:00 0 +7fe2cc000000-7fe2cd01d000 rw-p 00000000 00:00 0 +7fe2cd01d000-7fe2d0000000 ---p 00000000 00:00 0 +7fe2d0000000-7fe2d0041000 rw-p 00000000 00:00 0 +7fe2d0041000-7fe2d004e000 r--p 00000000 00:22 46693 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +7fe2d004e000-7fe2d0060000 r-xp 0000d000 00:22 46693 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +7fe2d0060000-7fe2d0066000 r--p 0001f000 00:22 46693 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +7fe2d0066000-7fe2d0067000 ---p 00025000 00:22 46693 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +7fe2d0067000-7fe2d0068000 r--p 00025000 00:22 46693 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +7fe2d0068000-7fe2d0069000 rw-p 00026000 00:22 46693 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjava.so +7fe2d0069000-7fe2d006a000 rw-p 00000000 00:00 0 +7fe2d006a000-7fe2d0072000 rw-s 00000000 00:22 204352 /tmp/hsperfdata_root/1099 +7fe2d0072000-7fe2d0075000 r--p 00000000 00:22 628 /lib/x86_64-linux-gnu/libnss_files-2.31.so +7fe2d0075000-7fe2d007c000 r-xp 00003000 00:22 628 /lib/x86_64-linux-gnu/libnss_files-2.31.so +7fe2d007c000-7fe2d007e000 r--p 0000a000 00:22 628 /lib/x86_64-linux-gnu/libnss_files-2.31.so +7fe2d007e000-7fe2d007f000 r--p 0000b000 00:22 628 /lib/x86_64-linux-gnu/libnss_files-2.31.so +7fe2d007f000-7fe2d0080000 rw-p 0000c000 00:22 628 /lib/x86_64-linux-gnu/libnss_files-2.31.so +7fe2d0080000-7fe2d0086000 rw-p 00000000 00:00 0 +7fe2d0089000-7fe2d2c9b000 r--s 00000000 00:22 46715 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/modules +7fe2d2c9b000-7fe2d2c9f000 r--p 00000000 00:22 46697 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjimage.so +7fe2d2c9f000-7fe2d2cb2000 r-xp 00004000 00:22 46697 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjimage.so +7fe2d2cb2000-7fe2d2cb8000 r--p 00017000 00:22 46697 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjimage.so +7fe2d2cb8000-7fe2d2cba000 r--p 0001c000 00:22 46697 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjimage.so +7fe2d2cba000-7fe2d2cbb000 rw-p 0001e000 00:22 46697 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjimage.so +7fe2d2cbb000-7fe2d2cbf000 ---p 00000000 00:00 0 +7fe2d2cbf000-7fe2d2dbc000 rw-p 00000000 00:00 0 +7fe2d2dbc000-7fe2d2dc9000 r--p 00000000 00:22 617 /lib/x86_64-linux-gnu/libm-2.31.so +7fe2d2dc9000-7fe2d2e63000 r-xp 0000d000 00:22 617 /lib/x86_64-linux-gnu/libm-2.31.so +7fe2d2e63000-7fe2d2efe000 r--p 000a7000 00:22 617 /lib/x86_64-linux-gnu/libm-2.31.so +7fe2d2efe000-7fe2d2eff000 r--p 00141000 00:22 617 /lib/x86_64-linux-gnu/libm-2.31.so +7fe2d2eff000-7fe2d2f00000 rw-p 00142000 00:22 617 /lib/x86_64-linux-gnu/libm-2.31.so +7fe2d2f00000-7fe2d2f02000 r--p 00000000 00:22 645 /lib/x86_64-linux-gnu/librt-2.31.so +7fe2d2f02000-7fe2d2f06000 r-xp 00002000 00:22 645 /lib/x86_64-linux-gnu/librt-2.31.so +7fe2d2f06000-7fe2d2f08000 r--p 00006000 00:22 645 /lib/x86_64-linux-gnu/librt-2.31.so +7fe2d2f08000-7fe2d2f09000 r--p 00007000 00:22 645 /lib/x86_64-linux-gnu/librt-2.31.so +7fe2d2f09000-7fe2d2f0a000 rw-p 00008000 00:22 645 /lib/x86_64-linux-gnu/librt-2.31.so +7fe2d2f0a000-7fe2d315c000 r--p 00000000 00:22 46725 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/server/libjvm.so +7fe2d315c000-7fe2d3e75000 r-xp 00252000 00:22 46725 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/server/libjvm.so +7fe2d3e75000-7fe2d4100000 r--p 00f6b000 00:22 46725 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/server/libjvm.so +7fe2d4100000-7fe2d4101000 ---p 011f6000 00:22 46725 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/server/libjvm.so +7fe2d4101000-7fe2d41ba000 r--p 011f6000 00:22 46725 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/server/libjvm.so +7fe2d41ba000-7fe2d41ef000 rw-p 012af000 00:22 46725 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/server/libjvm.so +7fe2d41ef000-7fe2d424b000 rw-p 00000000 00:00 0 +7fe2d424b000-7fe2d426d000 r--p 00000000 00:22 596 /lib/x86_64-linux-gnu/libc-2.31.so +7fe2d426d000-7fe2d43c7000 r-xp 00022000 00:22 596 /lib/x86_64-linux-gnu/libc-2.31.so +7fe2d43c7000-7fe2d4416000 r--p 0017c000 00:22 596 /lib/x86_64-linux-gnu/libc-2.31.so +7fe2d4416000-7fe2d441a000 r--p 001ca000 00:22 596 /lib/x86_64-linux-gnu/libc-2.31.so +7fe2d441a000-7fe2d441c000 rw-p 001ce000 00:22 596 /lib/x86_64-linux-gnu/libc-2.31.so +7fe2d441c000-7fe2d4420000 rw-p 00000000 00:00 0 +7fe2d4420000-7fe2d4421000 r--p 00000000 00:22 604 /lib/x86_64-linux-gnu/libdl-2.31.so +7fe2d4421000-7fe2d4423000 r-xp 00001000 00:22 604 /lib/x86_64-linux-gnu/libdl-2.31.so +7fe2d4423000-7fe2d4424000 r--p 00003000 00:22 604 /lib/x86_64-linux-gnu/libdl-2.31.so +7fe2d4424000-7fe2d4425000 r--p 00003000 00:22 604 /lib/x86_64-linux-gnu/libdl-2.31.so +7fe2d4425000-7fe2d4426000 rw-p 00004000 00:22 604 /lib/x86_64-linux-gnu/libdl-2.31.so +7fe2d4426000-7fe2d442c000 r--p 00000000 00:22 641 /lib/x86_64-linux-gnu/libpthread-2.31.so +7fe2d442c000-7fe2d443c000 r-xp 00006000 00:22 641 /lib/x86_64-linux-gnu/libpthread-2.31.so +7fe2d443c000-7fe2d4442000 r--p 00016000 00:22 641 /lib/x86_64-linux-gnu/libpthread-2.31.so +7fe2d4442000-7fe2d4443000 r--p 0001b000 00:22 641 /lib/x86_64-linux-gnu/libpthread-2.31.so +7fe2d4443000-7fe2d4444000 rw-p 0001c000 00:22 641 /lib/x86_64-linux-gnu/libpthread-2.31.so +7fe2d4444000-7fe2d4448000 rw-p 00000000 00:00 0 +7fe2d4448000-7fe2d444b000 r--p 00000000 00:22 46698 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjli.so +7fe2d444b000-7fe2d4455000 r-xp 00003000 00:22 46698 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjli.so +7fe2d4455000-7fe2d4458000 r--p 0000d000 00:22 46698 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjli.so +7fe2d4458000-7fe2d4459000 ---p 00010000 00:22 46698 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjli.so +7fe2d4459000-7fe2d445a000 r--p 00010000 00:22 46698 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjli.so +7fe2d445a000-7fe2d445b000 rw-p 00011000 00:22 46698 /root/.local/share/code-server/extensions/redhat.java-1.13.0-linux-x64/jre/17.0.5-linux-x86_64/lib/libjli.so +7fe2d445b000-7fe2d445e000 r--p 00000000 00:22 660 /lib/x86_64-linux-gnu/libz.so.1.2.11 +7fe2d445e000-7fe2d446f000 r-xp 00003000 00:22 660 /lib/x86_64-linux-gnu/libz.so.1.2.11 +7fe2d446f000-7fe2d4475000 r--p 00014000 00:22 660 /lib/x86_64-linux-gnu/libz.so.1.2.11 +7fe2d4475000-7fe2d4476000 ---p 0001a000 00:22 660 /lib/x86_64-linux-gnu/libz.so.1.2.11 +7fe2d4476000-7fe2d4477000 r--p 0001a000 00:22 660 /lib/x86_64-linux-gnu/libz.so.1.2.11 +7fe2d4477000-7fe2d4478000 rw-p 0001b000 00:22 660 /lib/x86_64-linux-gnu/libz.so.1.2.11 +7fe2d4479000-7fe2d447a000 ---p 00000000 00:00 0 +7fe2d447a000-7fe2d447b000 r--p 00000000 00:00 0 +7fe2d447b000-7fe2d447d000 rw-p 00000000 00:00 0 +7fe2d447d000-7fe2d447e000 r--p 00000000 00:22 584 /lib/x86_64-linux-gnu/ld-2.31.so +7fe2d447e000-7fe2d449e000 r-xp 00001000 00:22 584 /lib/x86_64-linux-gnu/ld-2.31.so +7fe2d449e000-7fe2d44a6000 r--p 00021000 00:22 584 /lib/x86_64-linux-gnu/ld-2.31.so +7fe2d44a6000-7fe2d44a7000 ---p 00000000 00:00 0 +7fe2d44a7000-7fe2d44a8000 r--p 00029000 00:22 584 /lib/x86_64-linux-gnu/ld-2.31.so +7fe2d44a8000-7fe2d44a9000 rw-p 0002a000 00:22 584 /lib/x86_64-linux-gnu/ld-2.31.so +7fe2d44a9000-7fe2d44aa000 rw-p 00000000 00:00 0 +7ffe7b38e000-7ffe7b3af000 rw-p 00000000 00:00 0 [stack] +7ffe7b3bd000-7ffe7b3c0000 r--p 00000000 00:00 0 [vvar] +7ffe7b3c0000-7ffe7b3c2000 r-xp 00000000 00:00 0 [vdso] +ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] + + +VM Arguments: +jvm_args: -Dsts.lsp.client=vscode -Dsts.log.file=/dev/null -XX:TieredStopAtLevel=1 -Xlog:jni+resolve=off -Dspring.config.location=file:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/classes/application.properties +java_command: org.springframework.ide.vscode.boot.app.BootLanguageServerBootApp +java_class_path (initial): /root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/classes:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/annotations-23.0.0.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/ant-1.10.12.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/ant-launcher-1.10.12.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/antlr-runtime-3.5.2.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/antlr4-4.9.3.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/antlr4-runtime-4.9.3.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/apiguardian-api-1.1.2.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/asm-9.4.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/asm-analysis-9.4.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/asm-tree-9.4.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/asm-util-9.4.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/byte-buddy-1.12.13.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/language-server/BOOT-INF/lib/caffeine-2.9.3.jar:/root/.local/share/code-server/extensions/pivotal.vscode-spring-boot-1.41.0-universal/langua +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 3 {product} {ergonomic} + uint ConcGCThreads = 1 {product} {ergonomic} + uint G1ConcRefinementThreads = 4 {product} {ergonomic} + size_t G1HeapRegionSize = 1048576 {product} {ergonomic} + uintx GCDrainStackTargetSize = 64 {product} {ergonomic} + size_t InitialHeapSize = 127926272 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MaxHeapSize = 2046820352 {product} {ergonomic} + size_t MaxNewSize = 1227882496 {product} {ergonomic} + size_t MinHeapDeltaBytes = 1048576 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonProfiledCodeHeapSize = 0 {pd product} {ergonomic} + bool ProfileInterpreter = false {pd product} {command line} + uintx ProfiledCodeHeapSize = 0 {pd product} {ergonomic} + size_t SoftMaxHeapSize = 2046820352 {manageable} {ergonomic} + intx TieredStopAtLevel = 1 {product} {command line} + bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning,jni+resolve=off uptime,level,tags + #1: stderr all=off uptime,level,tags + +Environment Variables: +PATH=/usr/lib/code-server/lib/vscode/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +LANG=en_US.UTF-8 +TERM=xterm +TZ=Asia/Seoul + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + *** Handler was modified! + *** Expected: javaSignalHandler in libjvm.so, mask=11100100110111111111111111111110, flags=SA_RESTART|SA_SIGINFO + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO + + +--------------- S Y S T E M --------------- + +OS: +PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" +NAME="Debian GNU/Linux" +VERSION_ID="11" +VERSION="11 (bullseye)" +VERSION_CODENAME=bullseye +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" +uname: Linux 4.4.180+ #42962 SMP Sat Sep 3 22:30:29 CST 2022 x86_64 +OS uptime: 0 days 9:38 hours +libc: glibc 2.31 NPTL 2.31 +rlimit (soft/hard): STACK 8192k/infinity , CORE infinity/infinity , NPROC infinity/infinity , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 64k/64k +load average: 117.20 121.77 74.48 + +/proc/meminfo: +MemTotal: 7989392 kB +MemFree: 121476 kB +MemAvailable: 214432 kB +Buffers: 8172 kB +Cached: 339712 kB +SwapCached: 60268 kB +Active: 4406892 kB +Inactive: 1256896 kB +Active(anon): 4267312 kB +Inactive(anon): 1125872 kB +Active(file): 139580 kB +Inactive(file): 131024 kB +Unevictable: 101128 kB +Mlocked: 101128 kB +SwapTotal: 6893484 kB +SwapFree: 0 kB +Dirty: 1280 kB +Writeback: 3804 kB +AnonPages: 5361976 kB +Mapped: 214856 kB +Shmem: 4948 kB +Slab: 221516 kB +SReclaimable: 84332 kB +SUnreclaim: 137184 kB +KernelStack: 44848 kB +PageTables: 187916 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 10888180 kB +Committed_AS: 24886344 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB +DirectMap4k: 19152 kB +DirectMap2M: 2947072 kB +DirectMap1G: 7340032 kB + +/sys/kernel/mm/transparent_hugepage/enabled: +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): + +Process Memory: +Virtual Size: 4791000K (peak: 5397264K) +Resident Set Size: 554384K (peak: 563192K) +Swapped out: 0K +C-Heap outstanding allocations: 38880K, retained: 9907K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 62032 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 65530 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 32768 + +container (cgroup) information: +container_type: cgroupv1 +cpu_cpuset_cpus: 0-3 +cpu_memory_nodes: 0 +active_processor_count: 4 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: 50 +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: unlimited +memory_usage_in_bytes: 5151228 k +memory_max_usage_in_bytes: 6310168 k +maximum number of tasks: not supported +current number of tasks: not supported + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 4 (initial active 4) (4 cores per cpu, 1 threads per core) family 6 model 92 stepping 9 microcode 0x3c, cx8, cmov, fxsr, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, tsc, tscinvbit, aes, erms, clmul, sha, clflush, clflushopt +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Celeron(R) CPU J3455 @ 1.50GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch intel_pt ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms mpx rdseed smap clflushopt sha_ni xsaveopt xsavec xgetbv1 dtherm ida arat pln pts md_clear arch_capabilities + +Online cpus: 0-3 +Offline cpus: +BIOS frequency limitation: 1501000 +Frequency switch latency (ns): 10000 +Available cpu frequencies: 1501000 1500000 1400000 1300000 1200000 1100000 1000000 900000 800000 +Current governor: performance +Core performance/turbo boost: 1 + +Memory: 4k page, physical 7989392k(121476k free), swap 6893484k(0k free) +Page Sizes: 4k + +vm_info: OpenJDK 64-Bit Server VM (17.0.5+8) for linux-amd64 JRE (17.0.5+8), built on Oct 18 2022 00:00:00 by "temurin" with gcc 10.3.0 + +END. diff --git a/order-service/settings.gradle b/order-service/settings.gradle new file mode 100644 index 0000000..e73a26b --- /dev/null +++ b/order-service/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'order-service' diff --git a/order-service/src/main/java/kiz/app/OrderServiceApplication.java b/order-service/src/main/java/kiz/app/OrderServiceApplication.java new file mode 100644 index 0000000..f5cc036 --- /dev/null +++ b/order-service/src/main/java/kiz/app/OrderServiceApplication.java @@ -0,0 +1,15 @@ +package kiz.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@EnableDiscoveryClient +@SpringBootApplication +public class OrderServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(OrderServiceApplication.class, args); + } + +} diff --git a/order-service/src/main/resources/application.yaml b/order-service/src/main/resources/application.yaml new file mode 100644 index 0000000..fa954f9 --- /dev/null +++ b/order-service/src/main/resources/application.yaml @@ -0,0 +1,24 @@ +server: + port: 8084 +# servlet: +# contextPath: /order + +spring: + config: + activate: + on-profile: local + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + shutdown: + enabled: true + +logging: + level: + kiz.app: DEBUG + org.hibernate.SQL: debug + org.hibernate.type: trace # 실제 들어가는 파라미터값 찍어주는 설정 diff --git a/order-service/src/main/resources/bootstrap.yaml b/order-service/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..5e2aff0 --- /dev/null +++ b/order-service/src/main/resources/bootstrap.yaml @@ -0,0 +1,26 @@ +spring: + application: + name: order-service # 서비스 ID (컨피그 클라이언트가 어떤 서비스를 조회하는지 매핑) + profiles: + active: local # 서비스가 실행할 기본 프로파일 +# cloud: +# config: +# uri: http://localhost:8889 # 컨피그 서버 위치 +# name: user +# profile: default + +eureka: + instance: + hostname: mindol.synology.me + lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초) + # 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면 + # 서비스 등록 해제 (디폴트 90초) + lease-expiration-duration-in-seconds: 90 + prefer-ip-address: false # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false) + client: + register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true) + fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true) + registry-fetch-interval-seconds: 30 # 서비스 목록을 설정한 시간마다 캐싱 (디폴트 30초) + disable-delta: true # 캐싱 시 변경된 부분만 업데이트할 지 여부 (디폴트 false) + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:8761/eureka/ \ No newline at end of file diff --git a/order-service/src/test/java/kiz/app/OrderServiceApplicationTests.java b/order-service/src/test/java/kiz/app/OrderServiceApplicationTests.java new file mode 100644 index 0000000..b3fbd1f --- /dev/null +++ b/order-service/src/test/java/kiz/app/OrderServiceApplicationTests.java @@ -0,0 +1,13 @@ +package kiz.app; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class OrderServiceApplicationTests { + + @Test + void contextLoads() { + } + +}