Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


5.1.0 버전에서 추가된 기능과 개선된 이슈를 정리한 릴리즈 노트입니다.

중요한 변경사항


중요한 순으로 기재합니다.


Ui text box

목차


Table of Contents
maxLevel1
indent30px
exclude목차
classtoc



Section


Column
width4%



Column
width55%


Tagdata : Rollup Partition 테이블 교체

5.1 에서는 Tagdata 테이블 의 Rollup Partition 테이블이 Log Table Type 이었습니다. 그래서 Partition 개수만큼 Log Table 이 많이 생성되어 있는 것과 같은 성능 부담을 가져왔습니다.

5.2 부터는 Rollup Partition 테이블 역시 Tagdata 테이블의 Partition Table Type 와 동일하게 변경되어, 낮은 CPU/메모리 비용으로 더욱 빠른 입력과 조회를 할 수 있습니다!


Column
width3%



Column


Column
width50px




Section


Column
width2%



Column
width40%


Code Block
languagesql
SELECT pd.start_time, pd.end_time, td.time, pd.name
FROM process_data pd, tag td
WHERE pd.name = td.name
 AND td.time BETWEEN pd.start_time AND pd.end_time
 AND td.name = '1';

 

 

 


Column
width3%



Column


Tagdata : 다른 테이블과 Join 가능

Tagdata 테이블이 이제 다른 테이블과 Join 할 수 있습니다.




Column
width50px




Section


Column
width4%



Column
width40%

Tagdata : 다양한 Predicate 사용 가능

기존의 Tagdata 테이블 SELECT 구문의 조건은
TAGNAME Column = ? 과 TAGTIME 범위조건만 가능했습니다.

이제는 일반 테이블처럼 다양한 Predicate 을 사용할 수 있습니다.





Column
width3%



Column


Code Block
languagesql
SELECT * FROM tag WHERE name LIKE 'TAG!%';



Column
width50px




Section


Column
width2%



Column
width40%


Code Block
languagesql
CREATE TAGDATA TABLE TAG (name VARCHAR(20) PRIMARY KEY, 
                          time DATETIME BASETIME, 
                          value DOUBLE SUMMARIZED);
INSERT INTO TAG METADATA VALUES ('TAG-A');

-- 아래 데이터를 APPEND 로 입력할 때엔, 
-- TAG-B 는 저장되어 있지 않지만 입력이 성공한다.
--   ('TAG-B', '2019-03-01 01:23:45', 36.5)





Column
width3%



Column

Tagdata : APPEND 시 TAGNAME 자동 생성

TAGDATA TABLE APPEND 할 때, TAGNAME 이 저장되어 있지 않은 경우에는 자동으로 TAGNAME 을 생성해서 Tag 데이터의 APPEND 를 속행할 수 있습니다.

제어할 수 있는 Property 는 TAGDATA_AUTO_NAME_INSERT_IN_APPEND 이며, 기본값은 1 (켜짐) 입니다.

Ui text box
typenote

현재는 APPEND 에서만 지원되며, INSERT 는 추후 패치를 통해 지원될 예정입니다.



Column
width50px






Section


Column
width4%



Column
width42%

Tagdata : INSERT INTO 에서 Bind 지원

INSERT INTO 구문에 Bind Variable 을 사용해서 입력이 가능해졌습니다.


Column
width3%



Column


Code Block
languagecpp
    if (SQLPrepare(sStmt, 
           (SQLCHAR *)"INSERT INTO TAG VALUES (?, '2010-01-01', 1.0)", 
           SQL_NTS) == SQL_ERROR) {
        printf("Prepare error\n");
    }

    if (SQLBindParameter(sStmt,
                         1,
                         SQL_PARAM_INPUT,
                         SQL_C_CHAR,
                         SQL_VARCHAR,
                         0,
                         0,
                         tagnameData,
                         0,
                         &tagnameDataSize) == SQL_ERROR) {
        printf("Bind error tag name");
    }





Column
width50px






Section


Column
width2%



Column
width40%


Code Block
languagecpp
    if (SQLPrepare(sStmt, 
           (SQLCHAR *)"SELECT * FROM tab1 DURATION ? SECOND", 
           SQL_NTS) == SQL_ERROR) {
        printf("Prepare error\n");
    }

    if (SQLBindParameter(sStmt,
                         1,
                         SQL_PARAM_INPUT,
                         SQL_C_UBIGINT,
                         SQL_INTEGER,
                         0,
                         0,
                         &sSecond,
                         0,
                         NULL) == SQL_ERROR) {
        printf("Bind error tag name");
    }



Column
width3%



Column

DURATION 절에 Bind 지원

SELECT 구문의 DURATION 절에도 Bind Variable 이 지원됩니다.


Column
width50px






Section


Column
width4%



Column
width42%

Disk Full 발생 시 알람 기능

마크베이스 서버가 위치한 디스크의 가용 공간의 일정 부분까지만 사용할 수 있습니다.

제어할 수 있는 Property 는 DISK_USED_RATIO_CAP 이며, 기본값은 0 (무제한) 입니다.

  • 해당 Property 는, 디스크의 사용 공간 비율(%) 을 나타냅니다.
  • Property 값이 설정되어 있는 경우, 해당 비율까지 디스크가 사용된 경우 다음의 현상이 발생합니다. 
    (이 디스크 사용은 마크베이스 서버의 사용과 무관할 수 있습니다.)
    • INSERT/APPEND 가 모두 실패하며, 디스크가 꽉 찼다는 에러 메시지를 반환합니다.
    • $MACHBASE_HOME/trc 의 machbase.trc 파일에, 디스크 사용량과 Property 값이 함께 출력됩니다.
    • $MACHBASE_HOME/trc 에 alert.trc 가 생성되며, 해당 파일에는 디스크의 사용량과 Property 값이 함께 저장되어 있습니다.


Column
width3%



Column


Code Block
$ cat alert-2018_12_19_18_21_59.trc 

[2018-12-19 18:12:51]
[WARN] Storage space exhausted...
	1019Giga, 476Mega, 376832 bytes total.
	346Giga, 643Mega, 421888 bytes used.
	(34.0%) used, (66.0%) free, (34.0%) cap.

[2018-12-19 18:12:55]
[INFO] Storage space secured...
	1019Giga, 476Mega, 376832 bytes total.
	337Giga, 295Mega, 339968 bytes used.
	(33.1%) used, (66.9%) free, (34.0%) cap.

[2018-12-19 18:21:59]
[STARTUP]



Column
width50px






Section


Column
width2%



Column

Trace Log Level 추가

$MACHBASE_HOME/trc/machbase.trc 에 출력되는 로그의 레벨을 조정할 수 있는 Property 를 추가합니다.

제어할 수 있는 Property 는 TRACE_LOG_LEVEL 이며, 기본값은 0 입니다.

  • Level 0 : 기존 내용이 출력
  • Level 1 : Level 0 의 내용 + Cluster Edition 의 상세한 상태 출력
  • Level 2 : Level 1 의 내용 + 서버의 모든 입력/쿼리 수행에 대한 상세 경과 기록 (SELECT/APPEND/DML) + 세션 연결 시작/종료 기록
Code Block
[2019-02-19 18:45:04 P-19295 T-139902498887424][INFO] Session is opened (Client IP : 192.168.0.31)
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (PREPARE): 0.173(ms) [insert into tag metadata values ('TAG_1', 'this is first!',  10, '192.168.0.1',  '2010-01-01')]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (EXECUTE): 8.986(ms) [insert into tag metadata values ('TAG_1', 'this is first!',  10, '192.168.0.1',  '2010-01-01')]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (PREPARE): 0.094(ms) [insert into tag metadata values ('TAG!_2', 'this is second.', 20, '192.168.1.20', '2009-01-02')]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (EXECUTE): 9.128(ms) [insert into tag metadata values ('TAG!_2', 'this is second.', 20, '192.168.1.20', '2009-01-02')]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (PREPARE): 0.093(ms) [insert into tag metadata values ('TAG!_4', 'this is fourth?',  40, null, '2008-01-03 12:00:00')]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (EXECUTE): 9.223(ms) [insert into tag metadata values ('TAG!_4', 'this is fourth?',  40, null, '2008-01-03 12:00:00')]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (PREPARE): 0.105(ms) [insert into tag metadata values ('TAG_5', null,  50, '192.168.2.50', null)]
[2019-02-19 18:45:05 P-19295 T-139902498887424][MM] Elapsed time (EXECUTE): 9.167(ms) [insert into tag metadata values ('TAG_5', null,  50, '192.168.2.50', null)]
[2019-02-19 18:45:05 P-19295 T-139902375159552][INFO] Session is opened (Client IP : 192.168.0.31)
[2019-02-19 18:45:05 P-19295 T-139902375159552][MM] Append Open. (TAG)
[2019-02-19 18:45:05 P-19295 T-139902375159552][MM] Append Close. (TAG)
[2019-02-19 18:45:05 P-19295 T-139902375159552][OK] Service Thread Finished !!
[2019-02-19 18:45:05 P-19295 T-139902375159552][INFO] Session is closed (Client IP : 192.168.0.31)



Column
width50px






Section


Column
width2%



Column
width40%


Ui text box
typenote

Pictures necessary

(Tag Analyzer Option Windows)



Column
width3%



Column

Tag Analyzer : 고정 X축 간격 설정

Zoom 을 할 때 마다 X축의 간격이 자동으로 설정되었는데, 이를 고정할 수 있습니다.


Column
width50px






Section


Column
width4%



Column
width42%

Tag Analyzer : 여러 Tag 를 하나의 Series 로 표시

TAG-A 는 10시부터 11시까지, TAG-B 는 11시부터 12시까지의 센싱 정보를 가지고 있다면, 이를 연결해서 볼 수 있는 방법도 필요합니다. 5.2부터는 Tag Analyzer 에서 이 기능을 지원합니다.

각 Chart 의 설정 창에서 Data > Tags 에 있는 태그에 콤마로 연결된 태그 이름 목록을 입력하면 연결이 됩니다. 동일 시점에 중복된 데이터가 존재하면, 이름 목록에서 앞에 위치한 태그의 데이터가 우선 표시됩니다.


Column
width3%



Column


Column
width50px






Section


Column
width2%



Column
width45%


Code Block
languagesql
-- _arrival_time 이 가장 작은 레코드의 i1 값을 획득
select first(_arrival_time, i1) from t1;

-- _arrival_time 이 가장 작은 레코드의 i1 값과, 
-- _arrival_time 이 가장 큰 레코드의 i1 값을 획득
select first(_arrival_time, i1), last(_arrival_time, i1) from t1;



Column
width3%



Column

Aggregate Function : FIRST/LAST

SELECT 와 GROUP BY 로 생성한 각 Group 에서, 기준이 되는 컬럼 값이 순서상 가장 작은 (또는 순서상 가장 큰) 레코드의 다른 컬럼 값을 반환하는 집계 함수입니다.


Column
width50px






Section


Column
width4%



Column
width42%

DELETE Log : 자동 DELETE 기능

아래의 CREATE TABLE 구문과 같이, 입력 시점에 특정 조건을 만족하는지 확인한 후 DELETE 를 자동으로 수행하는 기능을 제공합니다.


Column
width3%



Column


Code Block
languagesql
-- '입력 시점'에 다음을 검사한다.
--   >> 최근 삭제 시점보다 1시간 이상 경과한 경우, 
--      최근 2일치를 제외한 모든 레코드를 삭제한다.
CREATE TABLE t1 (...) KEEP 2 DAY AFTER APPEND INTERVAL 1 HOUR;



Column
width50px






Section


Column
width2%



Column
width42%


Code Block
languagecpp
// Set the SQL_ATTR_PARAM_BIND_TYPE statement attribute to use 
// column-wise binding. 
SQLSetStmtAttr(hstmt, SQL_ATTR_PARAM_BIND_TYPE, SQL_PARAM_BIND_BY_COLUMN, 0); 
 
// Specify the number of elements in each parameter array. 
SQLSetStmtAttr(hstmt, SQL_ATTR_PARAMSET_SIZE, ARRAY_SIZE, 0); 
 
// Specify an array in which to return the status of each set of 
// parameters. 
SQLSetStmtAttr(hstmt, SQL_ATTR_PARAM_STATUS_PTR, ParamStatusArray, 0); 
 
// Specify an SQLUINTEGER value in which to return the number of sets of 
// parameters processed. 
SQLSetStmtAttr(hstmt, SQL_ATTR_PARAMS_PROCESSED_PTR, &ParamsProcessed, 0); 
 
// Bind the parameters in column-wise fashion. 
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0, 
                  PartIDArray, 0, PartIDIndArray); 
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, DESC_LEN - 1, 0, 
                  DescArray, DESC_LEN, DescLenOrIndArray); 
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 7, 0, 
                  PriceArray, 0, PriceIndArray);



Column
width3%



Column

CLI : Array Binding

SQLBindParameter() 에서 하나의 값이 아닌 배열을 바인딩할 수 있는 기능을 사용할 수 있습니다.

여러 Bind - Execute 를 반복하게 되면 네트워크 비용을 불필요하게 소모하고 그만큼 유휴 시간이 늘어나 비효율적입니다.
반복적으로 값을 바인딩해야 한다면, 배열을 통째로 전달해서 효율적인 쿼리 연산을 할 수 있습니다.

현재는 열 단위 바인딩 (Column-wise binding) 만 지원합니다.


Column
width100px






Section


Column
width4%



Column
width60%50%

Cluster : Coordinator Role 변경

이전까진 Coordinator 가 Primary/Secondary 로 고정되어 있어, 안정성보다 발생하는 문제가 더욱 많았습니다. 고정되어 있던 역할을 5.2에서 수정했습니다.

이제는 Primary 가 사라지면 Secondary 가 Primary 로 바뀌며, 사라진 Primary 가 돌아와도 Secondary 로 바뀌면서 클러스터에 합류하게 됩니다.


Column
width3%



Column


Ui text box
typenote

Pictures necessary

(Coordinator Role)



Column
width100px






Section


Column
width2%



Column
width48%45%


Code Block
languagebash
$ machcoordinatoradmin --get-host-resource -i
-------------------------------------------------------------------------
     Machbase Coordinator Administration Tool
     Release Version - d35aa87.develop
     Copyright 2014, MACHBASE Corp. or its subsidiaries
     All Rights Reserved
-------------------------------------------------------------------------
Host Name : 192.168.0.32
   CPU Info :
      Model Name          : Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz
      Number of CPUs      : 8
      Number of CPU Cores : 4
      CPU Utilization     : 18.5%
      CPU IOWait Ratio    : 0.0%
   Memory Info :
      Physical Memory Utilization : 94.2%
      Virtual Memory Utilization  : 85.1%
   Network Info :
      Receive Bytes(per second)    : 35827
      Receive Packets(per second)  : 250
      Transmit Bytes(per second)   : 35716
      Transmit Packets(per second) : 248
   Disk Info :
      /dev/sda1 : 87.0%
         |-> 192.168.0.32:32110   /home/cumulus/work/nfx/test/nodes/coordinator1
         |-> 192.168.0.32:32310   /home/cumulus/work/nfx/test/nodes/broker1
         |-> 192.168.0.32:32410   /home/cumulus/work/nfx/test/nodes/active1_1
         |-> 192.168.0.32:32520   /home/cumulus/work/nfx/test/nodes/active2_2



Column
width3%



Column

Cluster : 호스트 자원 모니터링 기능

5.2 부터는 Cluster Edition 에서 각 Node 가 상주한 호스트의 자원을 모니터링할 수 있습니다. 다음은 수집할 수 있는 자원 정보를 나타냅니다.

  • CPU
  • Memory
  • Network
  • Disk

Coordinator 에 요청할 때, 각 호스트에서 주기적으로 수집한 정보를 제공합니다.

  • Command-line 을 통해 machcoordinatoradmin 에서 --get-host-resource명령을 입력해 요청 (plaintext 로 제공)
  • RESTful API (/Get-Host-Resource)를 통해 요청하거나 (JSON format 으로 제공)
Code Block
# Coordinator host 에서 command-line 을 통해 요청
machcoordinatoradmin --get-host-resource -i

# Coordinator 의 HTTP Admin Host:Port 에서 RESTful API 요청
curl http://192.168.0.32:32112/Get-Host-Resource



Column
width100px





Warning

아래부터는 작성 중입니다.

그 외 변경사항


Table of Content Zone
maxLevel4
minLevel4
locationtop

CPU_AFFINITY_COUNT 음수 지원

CPU_AFFINITY_COUNT 에서 음수를 지원합니다. 사용 가능한 CPU Core 개수에서 해당 값을 뺀 나머지를 AFFINITY_COUNT 로 적용합니다.
이 때 CPU_AFFINITY_BEGIN_ID Property 값에서 출발하기 때문에, 주의해서 사용해야 합니다.

해당 Property 의 기본값은 여전히 0 (모두 사용) 입니다.


DELETE 동시 수행 불가

DELETE 동시 수행을 요청하더라도, DELETE 는 순차적으로 진행되어 이후 SELECT 를 방해합니다.
따라서 DELETE 가 수행 중인 경우에는, 동시에 요청된 DELETE 는 모두 에러 메시지를 발행하도록 변경되었습니다.


Tagdata : TAGNAME 에도 UPDATE 가능

TAGNAME 은 인덱스가 있었기 때문에 불가능했던 UPDATE 구문이, 이제 가능해졌습니다.

Code Block
languagesql
UPDATE TAG METADATA SET NAME = 'TAG-AA' WHERE NAME = 'TAG-A';


Tagdata : DISK_KEYVALUE_DELETE_LOCKFREE 추가

DELETE 수행 시, 최신 데이터에 DELETE 범위의 데이터가 오지 않는다고 확신할 수 있다면 DELETE 성능을 올릴 수 있는 Property 입니다.
DISK_KEYVALUE_DELETE_LOCKFREE Property 값을 통해, Tagdata Table 의 최신 데이터에 대한 DELETE 를 건너뛸 수 있습니다.

기본값은 1 (켜짐) 입니다. 실시간 데이터가 동일 Timestamp 값을 가지고 입력된다면, 해당 Property 의 기본값을 그대로 두시는 것을 추천합니다.


DATE_TRUNC() 시간 범위 제한 해제

각 시간 단위마다, 시간 범위가 제한되었던 문제가 해결되었습니다. 
예를 들어, 초 단위인 경우에는 resolution 값이 45초를 넘을 수 없었지만, 지금은 86400 초 까지 사용 가능합니다.

second86400
minute1440
day1
month1
year1


Cluster Edition : DDL 부분 실패해도, Cluster 서비스를 계속함

부분적으로 몇몇 Node 가 DDL 이 실패하게 되면, Cluster 전체가 서비스를 못 하는 상황이 발생했었습니다.
이제는 DDL 이 실패하더라도, 성공한 Node 만으로 Cluster 서비스를 계속하도록 수정했습니다.

실패한 Node 는 DDL-incompleted 상태가 되며, 별도 조치가 필요하거나 Remove-Node 로 삭제해야 합니다.



개선된 이슈


Ui text box
typeinfo

반영된 순으로 기재합니다.


Table of Content Zone
maxLevel3
minLevel3
locationtop

Common

모든 서버 제품 적용되는 이슈 사항입니다.

  • LSM 인덱스를 사용한 Log Table SELECT 시, 인덱싱이 완료된 최근 레코드가 매우 낮은 확률로 조회되지 않는 문제가 해결되었습니다. (#1259)
  • Lookup Table 에서 DURATION 절을 사용하게 되면, 서버가 비정상종료되던 문제가 해결되었습니다. (#1271)
  • 클라이언트가 비정상적인 프로토콜 메시지를 전송할 때, 서버의 에러 메시지가 Invalid protocol state. 만 나오던 문제가 해결되었습니다. (#1214)
    이제는 Invalid protocol state. Check your application again. (Protocol = OOO, Stmt State = OOO) 로 자세히 나오도록 했습니다.
  • 메모리 사용량을 줄이기 위해 DISK_KEYVALUE_ENABLE_MEM_INDEX Property 를 해제 (0) 하는 경우, 
    Tagdata 테이블의 SELECT 가 느려지던 문제가 해결되었습니다. (#1164)
  • SELECT 가 빈번한 상황에서, 같은 테이블에 DELETE 를 수행하는 경우엔 Hang 이 발생하던 문제가 해결되었습니다. (#1286)
    DELETE 작업을 곧바로 진행하기 힘든 경우에는, 별도의 DELETE Thread 에게 맡긴 채로 작업을 종료하기 때문에 DELETE 완료가 당장 안될 수도 있습니다.
  • Windows 환경에서, 클라이언트 연결 해제가 완료되었음에도 TIME_WAIT 가 급격히 늘어나는 문제가 해결되었습니다. (#1160)
  • UNION ALL 에서 AVG Function 을 조회해서 합치는 경우, 서버가 비정상 종료하던 문제가 해결되었습니다. (#1330)
  • Tagdata Table 에서 DELETE WHERE 를 통해 메타데이터 삭제를 수행할 때, 간헐적으로 서버가 비정상 종료하던 문제가 해결되었습니다. (#1322)
  • Windows 환경에서, 이 작업을 완료하기 위한 페이징 파일이 너무 작습니다 라는 에러와 함께 서버가 비정상 종료하던 문제가 해결되었습니다. (#1291)
  • Tagdata Table DELETE 이후에도 SELECT 속도가 예전보다 빨라지지 않던 문제가 해결되었습니다. (#1300)
  • SELECT 구문에서 DURATION 절에 MINUTES 처럼 복수형 단위를 사용해도 에러가 나오지 않아서 의미 전달이 실패하던 문제가 해결되었습니다. (#1291)
    기본적으로 단위를 나타낼 때는 단수형 단위를 사용합니다. (예) MINUTE, SECOND
  • Fixed Table 조회 시, 간혹 실패하는 경우가 발생할 수 있는데, 이 때 서버로의 클라이언트 접속이 아예 안 되는 문제가 해결되었습니다. (#1354)
  • Stream 도중 실패할 경우, 에러 메시지를 출력한 다음에 종료하도록 수정했습니다. (#859)
  • Volatile Table 의 INSERT INTO ON DUPLICATE UPDATE 구문이 실패하는 경우엔, 레코드가 변경되지 않습니다.
    그런데 이 때 재부팅하면 레코드가 변경되어 있던 문제가 해결되었습니다. (#1366)
  • 저장 관리자에서 메모리 재사용 목적으로 메모리 해제를 하지 않아 사용 메모리가 증가하던 문제가 해결되었습니다. (#1392)
  • SELECT 도중 DROP TABLE TAG; 작동이 수행되어 서버가 비정상 종료하던 문제가 해결되었습니다. (#1325)
  • 호스트 시간이 현재 시각보다 과거/미래로 수정될 때, 서버가 비정상 종료하던 문제가 해결되었습니다. (#1420)
  • SELECT 가 Parallel Scan 을 진행할 때, 인덱스 빌드 중인 경우 결과를 가져오지 못하던 문제가 해결되었습니다. (#1418)
  • SELECT 가 Parallel Scan 을 진행할 때, LIMIT 가 존재하면 LIMIT 까지만 읽어 성능 개선을 하도록 수정했습니다. (#477)
  • Tagdata Table SELECT 에서, 시간 범위 조건에 등호 (=) 가 포함되지 않았는데 등호 조건에 포함된 결과까지 나오던 문제가 해결되었습니다. (#1431)
  • RTRIM() 에서 길이가 작은 문자열에 적용할 경우 정상적으로 작동하지 않던 문제가 해결되었습니다. (#1472)
  • NULL 을 나타내는 값을 WHERE 절에 사용할 경우, 에러가 발생하도록 수정했습니다. (#1457)
    NULL 값 비교에는 IS NULL 또는 IS NOT NULL 을 사용해야 합니다.

Cluster Edition

Cluster Edition 에 적용되는 이슈 사항입니다.

  • 동일한 패키지 이름을 Add-Package 할 경우 성공하던 문제가 해결되었습니다. (#1296)
  • Fixed Table 조회 시 Global OID 가 간헐적으로 오염될 수 있는 문제가 해결되었습니다. (#1285)
  • --force-restore-state 명령의 대상이 scrapped 상태만 지원됐었으나, ddl-incomplete 상태도 가능하도록 수정했습니다. (#1324)
  • 종료되었다 되살아난 Warehouse 가 존재할 경우, 이후 DDL 수행이 되살아난 Warehouse 에서는 전혀 다른 방법으로 진행하던 문제가 해결되었습니다. (#1223)
    이렇게 진행할 경우, 추후 진행되는 쿼리가 해당 Warehouse 에서는 수행되지 않거나 비정상 종료될 수 있는 잠재적 위험을 가지고 있었습니다.
  • machloader 를 사용해 입력하는 경우, Warehouse 가 전부 비정상 종료되던 문제가 해결되었습니다. (#1367)
  • 종료되었다 되살아난 Warehouse 가 인식된 직후, SELECT 가 실패하던 문제가 해결되었습니다. (#1344)
  • 연결이 종료된 상황에서 메시지를 보내는 경우, 메시지가 전달이 성공한 것 처럼 여겨지던 문제가 해결되었습니다. (#1327)
  • INSERT SELECT 도중 Warehouse 가 종료될 경우, 해당 Warehouse 는 scrapped 상태가 되도록 수정했습니다. (#1441)
  • Secondary Coordinator 가 추가되거나 되살아났다면, Primary Coordinator 의 DDL 정보와 동기화되도록 수정했습니다. (#1429)

MWA / Tag Analyzer

마크베이스 웹 관리자에 적용되는 이슈 사항입니다.

  • 깨진 한글이나 올바르지 않은 문자가 서버에 입력된 경우, MWA 에서 인코딩이 실패해도 계속 진행하던 문제가 해결되었습니다. (#1381)
  • 특정 OS 에서, MWAserver start 시 표시되는 접속 주소가 올바르지 않던 문제가 해결되었습니다. (#1387)
  • Coordinator 상태, Warehouse 상태 추가가 이뤄지면서, MWA Cluster Admin 에도 동일하게 표시할 수 있도록 수정했습니다. (#1426)

Client Library

클라이언트 라이브러리에 적용되는 이슈 사항입니다.

  • 서버로 ODBC 연결 실패 시, 에러 메시지가 출력되지 않아 정상 상황으로 보이던 문제가 해결되었습니다. (#1226)
  • C# Connector 에서, 연결 문자열 (Connection String) 에 입력할 수 있도록 CONNECT_TIMEOUT, COMMAND_TIMEOUT 을 지원합니다. (#1356)
  • C# Connector 에서, APPEND 실패 에러 메시지를 확인할 수 있는 Delegator Type 과 인터페이스를 추가했습니다. (#1357)
  • C# Connector 에서, SocketException 을 제대로 발행하지 않던 문제가 해결되었습니다. (#1327)