2015年5月31日日曜日

アルチュハイマーな脳でも、モナドが何となく分かってきたような気がする

Real World Haskellの15.4章の「配管を隠す遊び」で掲載されているコードをちょっと弄ってみたものの、これであっているかどうかいまいち自信が持てないためブログに晒してみました
内容はStateモナドの詳細を隠すためのコードの書き方が掲載されています、そのまま直書きですとこんな感じ、
module Supply
       (
         Supply
       , next
       , runSupply
       ) where

import Control.Monad.State

newtype Supply s a = S (State [s] a)

unwrapS :: Supply s a -> State [s] a
unwrapS (S s) = s

instance Monad (Supply s) where
  s >>= m = S (unwrapS s >>= unwrapS . m)
  return = S . return

runSupply :: Supply s a -> [s] -> (a, [s])
runSupply (S m) xs = runState m xs

next :: Supply s (Maybe s)
next = S $ get >>= \st ->
             case st of
               [] -> return Nothing
               (x:xs) -> put xs >>= \_ -> return (Just x)
サンプルはnext関数を呼ぶとStateモナドが持っている状態のリストから1つづつ値を返してくるというコード、こうやってSupplyモナドを走らせる
*Supply> runSupply next [1,2,3,4,5]
(Just 1,[2,3,4,5])
これはこれでいいのですが、ghc-7.8.3で実行するとこんなエラーがでる
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :load "/home/cuomo/Code/haskell/State/Supply5.hs"
[1 of 1] Compiling Supply      ( /home/cuomo/Code/haskell/State/Supply5.hs, interpreted )

/home/cuomo/Code/haskell/State/Supply5.hs:15:10: Warning:
    ‘Supply’ is an instance of Monad but not Applicative - this will become an error in GHC 7.10, under the Applicative-Monad Proposal.
Ok, modules loaded: Supply.
*Supply> 
「ghc-7.10だとエラーになるからSupplyのApplicativeインスタンスを書けよ」って脅かされる、なので自分でインスタンスを適当に書いてみた

...
import Control.Applicative
...

instance Applicative (Supply s) where
   pure = return
   (S mf) <*> (S m) = undefined
そしたら今度は「Functor書け」って怒られる始末、なのでいわれるがままにFunctorを書く
instance Functor (Supply s) where
  fmap f (S m) = undefined
これで、構文チェックはOKらしいが「undefined」なので詳細をつめる
instance Functor (Supply s) where
  fmap f (S m) = S $ f <$> m

instance Applicative (Supply s) where
   pure = return
   (S mf) <*> (S m) = S $ mf >>= \f -> f <$> m
これで警告やエラーはとまったがFuntor則にあってるかどうか確かめないとわからないので、確認してみる
第1法則「fmap id = id」の確認
*Supply> runSupply (id `fmap` next) [1,2,3,4,5] == runSupply next [1,2,3,4,5]
True
良さげ...
第2法則「fmap (f . g) = fmap f . fmap g」の確認
*Supply> :m +Data.Maybe
*Supply Data.Maybe> runSupply (fmap (id . fromJust) next) [1,2,3,4,5] == runSupply ((fmap id . fmap fromJust) next) [1,2,3,4,5]
True
という感じでいいのでしょうか?
next関数がMaybe値を返してくるのでfromMaybeを使って試してみました
そうするとこんな感じで使えるApplicativeだと
*Supply> runSupply (return (liftM (+1)) <*> next) [1,2,3,4,5]
(Just 2,[2,3,4,5])
何となくしっくり来た感があるのですが間違っていないでしょうか...ちなみに「アル中ハイマー」「アルチュハイマー」は別物です、どちらかといえば「アルチュハイマー」の方がかわいいです。



アルチュハイマーな型はこちらをどうぞ

2015年5月10日日曜日

Solaris11.2 pkgbuildでエラーのその後...


先日 @ftnk 先生にお願いしてあったpkgbuildのエラーの件で私なりに調べてみました。

Solaris の pkgbuild でエラーが出た場合の対処

で書いてあるように「/usr/lib/python2.6/vendor-packages/pkg/server/depot.py」にそれ系の設定があったのを思いだし、気にかかったので調べてみました。

でエラーの内容

Framework error: code: 28 reason: Operation too slow. Less than 1024 bytes/sec transfered the last 30


このエラーコード28とは「pycurl.E_OPERATION_TIMEOUTED」で定義されていて

>>> import pycurl
>>> pycurl.E_OPERATION_TIMEOUTED
28
>>>

こいつかraiseされて止まっているっぽい、コードでいうと

「/usr/lib/python2.6/vendor-packages/pkg/client/transport/engine.py:305」

    errors_seen += 1
else:
    timeout = en == pycurl.E_OPERATION_TIMEOUTED
    ex = tx.TransportFrameworkError(en, url, em,
        repourl=urlstem, uuid=uuid)
    repostats.record_error(decayable=ex.decayable,
        timeout=timeout)
    errors_seen += 1

ここでTransportFrameworkErrorが飛んできていました、でpycurlのTIMEOUT系のパラメータでグローバルな変数を調べて見ましたところ

PKG_CLIENT_CONNECT_TIMEOUT
PKG_CLIENT_LOWSPEED_TIMEOUT

という2パラメータを発見、このうちPKG_CLIENT_LOWSPEED_TIMEOUTはcurlの処理がストールしたかどうかを判断するための設定値らしくディフォルトだと

>>> pycurl.LOW_SPEED_TIME
20

で設定されていました、そしてこの値はオーバーライド出きるらしく以下のファイル、「/usr/lib/python2.6/vendor-packages/pkg/client/__init__.py」で定義されていて、

try:
# Number of seconds below lowspeed limit before # transaction is aborted. self.PKG_CLIENT_LOWSPEED_TIMEOUT = int(os.environ.get( "PKG_CLIENT_LOWSPEED_TIMEOUT", self.pkg_client_lowspeed_timeout_default)) except ValueError: self.PKG_CLIENT_LOWSPEED_TIMEOUT = \ self.pkg_client_lowspeed_timeout_default


このパラメータを環境変数にセットしておくとその値を使ってくれるっぽい、なので.bash_profileに以下を追加してみた

export PKG_CLIENT_LOWSPEED_TIMEOUT=3600

3600は適当

これで試した結果エラーが発生せずビルドに成功しました。
これでいいのかどうか不明ですが、非力なPCだった場合、この設定を増やした方が良さそうです、ちなみに調べた訳ではないのですが、この設定値を0に設定すると無限に待つような動きっぽいです。

たしかにローカルでpkgsendするならcurlじゃなくて直接ファイルに書いた方が早いような気もしますが、間違っていたらごめんなさい。

とりあえず @ftnk 先生ありがとうございました。



2015年5月8日金曜日

Solaris11でMySQL Cluster 7.4.6をやってみた

最近MySQL界隈のセミナーなどで耳にするMySQL Clusterに興味を持ってしまい、書籍などで調べてみたものの良く分からず、 どうしても実際にイジって見ないと気が済まないのでSolaris版を作ってやってみました。
MySQL Clusterの詳細は非常に奥深いので、私が適当な事を書くと叱られると思いますので、書籍やMySQLの先生方にお願いするとして(適当ですみません)、とりあえずSolarisゾーンで試してみる。

今回はSolarisゾーンへのインストールから初期動作までということで...



パッケージサーバーの準備


まずはインストールとか言われても、やる気が起きるわけがないので、こちらに用意しました。IPSサーバーを準備すればソースからのビルドは免れます。
gentoo install battleの猛者には叱られるかもしれません...

まずはゾーンを準備


構築環境
  • Gentoo Linux Linux 3.14.2-gentoo #7 SMP
  • Solaris11.1 x86 on vmware player


で仮想環境のSolaris上へ、準備するゾーンは全部で5つ、
  • iichiko2-spec(IPSパッケージ用)
  • mgm(マネージメントノード)
  • sql1(SQLノード1)
  • sql2(SQLノード2)
  • data1(データノード1)
  • data2(データノード2)

以上のゾーンで構成します、実際はvmware player for gentoo上の仮想環境上のSolaris11なのでその辺の環境の差は各自で調整してください。


iichiko2-specゾーン
create -b
set brand=solaris
set zonepath=/rpool/zones/iichiko2-spec
set autoboot=false
set ip-type=shared
add net
set address=192.168.254.103/24
set configure-allowed-address=true
set physical=net0
end
mgmゾーン
create -b
set brand=solaris
set zonepath=/rpool/zones/mgm
set autoboot=false
set ip-type=shared
add net
set address=192.168.254.80/24
set configure-allowed-address=true
set physical=net0
end
sql1ゾーン
create -b
set brand=solaris
set zonepath=/rpool/zones/sql1
set autoboot=false
set ip-type=shared
add net
set address=192.168.254.81/24
set configure-allowed-address=true
set physical=net0
end
sql2ゾーン
create -b
set brand=solaris
set zonepath=/rpool/zones/sql2
set autoboot=false
set ip-type=shared
add net
set address=192.168.254.82/24
set configure-allowed-address=true
set physical=net0
end
data1ゾーン
create -b
set brand=solaris
set zonepath=/rpool/zones/data1
set autoboot=false
set ip-type=shared
add net
set address=192.168.254.83/24
set configure-allowed-address=true
set physical=net0
end
data2ゾーン
create -b
set brand=solaris
set zonepath=/rpool/zones/data2
set autoboot=false
set ip-type=shared
add net
set address=192.168.254.84/24
set configure-allowed-address=true
set physical=net0
end

ゾーン作成とパッケージインストール


iichiko2-specを作成しIPSを利用できるようにする
global-zone ~ # zoneadm -z iichiko2-spec install
global-zone ~ # zlogin -C iichiko2-spec

IPS設定
root@iichiko2-spec:~# wget http://www.karky7.com/files/ips-mysql-cluster-7.4.6_2015.05.06.zfs.img.gz
root@iichiko2-spec:~# zfs create -p -o mountpoint=/var/pkglocal rpool/pkglocal
root@iichiko2-spec:~# gunzip < ips-mysql-cluster-7.4.6_2015.05.06.zfs.img.gz | zfs recv -F rpool/pkglocal
root@iichiko2-spec:~# svccfg -s application/pkg/server setprop pkg/inst_root=/var/pkglocal
root@iichiko2-spec:~# svccfg -s pkg/server setprop pkg/port=80
root@iichiko2-spec:~# svccfg -s svc:/application/pkg/server setprop pkg/readonly=true
root@iichiko2-spec:~# svcadm refresh pkg/server
root@iichiko2-spec:~# svcadm enable pkg/server

こんな画面が出ればOK、これでpkg installが可能になる



global-zone ~ # pkg set-publisher -g http://192.168.254.103 iichiko2-spec
global-zone ~ # pkg publisher
発行元                   タイプ ステータス P 場所
solaris                     起点   オンライン F http://192.168.254.100/
iichiko2-spec               起点   オンライン F http://192.168.254.103/
global-zone ~ #
続いて各サーバーを作成
global-zone ~ # zoneadm -z mgm install
global-zone ~ # zlogin -C mgm
とりあえずmgmゾーンでパッケージを入れて、後はゾーンのクローンで済ませる(面倒)

global-zone ~ # zlogin mgm
[Connected to zone 'mgm' pts/3]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@mgm:~# pkg install pkg://iichiko2-spec/database/mysql-cluster-gpl-74 \
pkg://iichiko2-spec/database/mysql-cluster-gpl-74/devel \
pkg://iichiko2-spec/database/mysql-cluster-gpl-74/doc \
pkg://iichiko2-spec/database/mysql-cluster-gpl-74/library \
pkg://iichiko2-spec/database/mysql-cluster-gpl-74/server \
pkg://iichiko2-spec/database/mysql-cluster-gpl-74/tests
           Packages to install:  6
       Create boot environment: No
Create backup boot environment: No
            Services to change:  1

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                6/6   15897/15897  329.3/329.3  3.0M/s

PHASE                                          ITEMS
Installing new actions                   16957/16957
Updating package state database                 Done
Updating image state                            Done
Creating fast lookup database                   Done
root@mgm:~#
後はcloneで増産
global-zone ~ # zoneadm -z mgm shutdown
global-zone ~ # zoneadm -z sql1 clone mgm
global-zone ~ # zoneadm -z sql2 clone mgm
global-zone ~ # zoneadm -z data1 clone mgm
global-zone ~ # zoneadm -z data2 clone mgm
global-zone ~ # zoneadm -z sql1 boot
global-zone ~ # zoneadm -z sql2 boot
global-zone ~ # zoneadm -z data1 boot
global-zone ~ # zoneadm -z data2 boot
global-zone ~ # zlogin -C sql1
global-zone ~ # zlogin -C sql2
global-zone ~ # zlogin -C data1
global-zone ~ # zlogin -C data2
global-zone ~ # zoneadm -z mgm boot
全部揃うとこんな感じでゾーンが稼働中
  
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              solaris  shared
   3 iichiko2-spec    running    /rpool/zones/iichiko2-spec     solaris  shared
  10 sql1             running    /rpool/zones/sql1              solaris  shared
  11 sql2             running    /rpool/zones/sql2              solaris  shared
  12 data1            running    /rpool/zones/data1             solaris  shared
  13 data2            running    /rpool/zones/data2             solaris  shared
  14 mgm              running    /rpool/zones/mgm               solaris  shared

ここからMySQL Clusterの設定


マネージメントサーバーの設定
global-zone ~ # zlogin mgm
root@mgm:~# cp /etc/mysql/7.4/ndb-mgmd_74.config.sample /etc/mysql/config.ini
root@mgm:~# svcadm enable svc:/application/database/ndb-mgmd_74:default
root@mgm:~# ls -l /var/mysql/7.4/mgm/
total 7
-rw-r--r-- 1 mysql mysql    5 2015-05-07 08:03 ndb_1.pid
-rw-r--r-- 1 mysql mysql  687 2015-05-07 08:03 ndb_1_cluster.log
-rw-r--r-- 1 mysql mysql 4380 2015-05-07 08:03 ndb_1_config.bin.1
-rw-r--r-- 1 mysql mysql   81 2015-05-07 08:03 ndb_1_out.log
root@mgm:~#

とりあえずこんな感じで動く、他のゾーンはまだ動いてないよ
root@mgm:~# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=4 (not connected, accepting connect from 192.168.254.83)
id=5 (not connected, accepting connect from 192.168.254.84)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.254.80  (mysql-5.6.24 ndb-7.4.6)

[mysqld(API)]   2 node(s)
id=2 (not connected, accepting connect from 192.168.254.81)
id=3 (not connected, accepting connect from 192.168.254.82)

ndb_mgm>
各ゾーンのIPとIDが重要なので、変更する場合は各自で調整してください

data1の設定

IDがプロセスIDのpidファイル名に含まれてしまうので、ここは調整しておく
global-zone ~ # zlogin data1
root@data1:~# cp /etc/mysql/7.4/ndb-ndbmtd_74.my.cnf.ndb /etc/mysql/my.cnf
root@data1:~# svcprop svc:/application/database/ndb-ndbmtd_74:default | grep pid
ndb-ndbmtd_74/pid astring /var/mysql/7.4/data/ndb_5.pid
root@data1:~# svccfg -s  svc:/application/database/ndb-ndbmtd_74:default setprop ndb-ndbmtd_74/pid="/var/mysql/7.4/data/ndb_4.pid"
root@data1:~# svcadm refresh svc:/application/database/ndb-ndbmtd_74:default
root@data1:~# svcadm enable svc:/application/database/ndb-ndbmtd_74:default
root@data1:~# ls -l /var/mysql/7.4/data/
total 4
-rw-r--r-- 1 mysql mysql    5 2015-05-07 08:08 ndb_4.pid
-rw-r--r-- 1 mysql mysql 2227 2015-05-07 08:08 ndb_4_out.log
root@data1:~#

data2の設定
global-zone ~ # zlogin data2
root@data2:~# cp /etc/mysql/7.4/ndb-ndbmtd_74.my.cnf.ndb /etc/mysql/my.cnf
root@data2:~# svcprop svc:/application/database/ndb-ndbmtd_74:default | grep pid
ndb-ndbmtd_74/pid astring /var/mysql/7.4/data/ndb_5.pid
root@data2:~# svcadm enable svc:/application/database/ndb-ndbmtd_74:default
root@data2:~# svcs -xv
root@data2:~# ls -l /var/mysql/7.4/data/
total 4
-rw-r--r-- 1 mysql mysql    5 2015-05-07 08:10 ndb_5.pid
-rw-r--r-- 1 mysql mysql 2227 2015-05-07 08:10 ndb_5_out.log
root@data2:~#
sql1の設定
global-zone ~ # zlogin sql1
[Connected to zone 'sql1' pts/3]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@sql1:~# cp /etc/mysql/7.4/ndb-sql_74.my.cnf.sql /etc/mysql/my.cnf
root@sql1:~# svcadm enable svc:/application/database/ndb-sql_74:default
...ちょっと時間がかかります svcs -xvでエラーがでなければOKです
root@sql1:~# svcs -xv
root@sql1:~# 
root@sql1:~# ls -l /var/mysql/7.4/data/
total 110641
-rw-rw---- 1 mysql mysql       56 2015-05-07 08:13 auto.cnf
-rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:13 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:12 ib_logfile1
-rw-rw---- 1 mysql mysql 12582912 2015-05-07 08:13 ibdata1
drwx------ 2 mysql mysql       81 2015-05-07 08:12 mysql
drwx------ 2 mysql mysql       63 2015-05-07 08:12 ndbinfo
drwx------ 2 mysql mysql       55 2015-05-07 08:12 performance_schema
-rw-r----- 1 mysql mysql     3536 2015-05-07 08:14 sql1.err
-rw-rw---- 1 mysql mysql        3 2015-05-07 08:13 sql1.pid
drwx------ 2 mysql mysql        2 2015-05-07 08:12 test
root@sql1:~#
sql2の設定
global-zone ~ # zlogin sql2
[Connected to zone 'sql2' pts/3]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@sql2:~# cp /etc/mysql/7.4/ndb-sql_74.my.cnf.sql /etc/mysql/my.cnf
root@sql2:~# svcadm enable svc:/application/database/ndb-sql_74:default
root@sql2:~# ls -l /var/mysql/7.4/data/
total 110641
-rw-rw---- 1 mysql mysql       56 2015-05-07 08:16 auto.cnf
-rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:16 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:15 ib_logfile1
-rw-rw---- 1 mysql mysql 12582912 2015-05-07 08:16 ibdata1
drwx------ 2 mysql mysql       81 2015-05-07 08:15 mysql
drwx------ 2 mysql mysql       63 2015-05-07 08:15 ndbinfo
drwx------ 2 mysql mysql       55 2015-05-07 08:15 performance_schema
-rw-r----- 1 mysql mysql     3575 2015-05-07 08:16 sql2.err
-rw-rw---- 1 mysql mysql        4 2015-05-07 08:16 sql2.pid
drwx------ 2 mysql mysql        2 2015-05-07 08:15 test
root@sql2:~#

SQLノードでクラスタ利用可能か確認


sql1、sql2のどちらのSQLノードでもいいのでzloginし、mysqlコマンドで利用可能なストレージエンジンを確認してみる。
sol11-1dev ~ # zlogin sql1
[Connected to zone 'sql1' pts/5]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@sql1:~# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.24-ndb-7.4.6 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster         | YES     | Clustered, fault-tolerant tables                               | YES          | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| ndbinfo            | YES     | MySQL Cluster system information storage engine                | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)
mysql>
「ndbcluster」ストレージエンジンが「YES」なら利用可能、この時点で感動していいレベル

クラスターを起動させる


まだデータノードは「not started」、SQLノードも「not connected」です。
これを起動するには「ALL START」コマンドで起動する、データノードのサービス開始をマネージメントノードから実行するように、データノードのmy.cnfに書いてあるので、データノードのサービススタートと同時にデーターノードが走り出さないような設定にしてあります。
ndb_mgm> ALL START

Node 4: Started (version 7.4.6)
Node 5: Started (version 7.4.6)

ndb_mgm>
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=4    @192.168.254.83  (mysql-5.6.24 ndb-7.4.6, Nodegroup: 0, *)
id=5    @192.168.254.84  (mysql-5.6.24 ndb-7.4.6, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.254.80  (mysql-5.6.24 ndb-7.4.6)

[mysqld(API)]   2 node(s)
id=2    @192.168.254.81  (mysql-5.6.24 ndb-7.4.6)
id=3    @192.168.254.82  (mysql-5.6.24 ndb-7.4.6)

ndb_mgm>
データノードへ*マークついて無事起動確認、データノード2台で1グループの設定で動作を確認できます(nodegroup 0)、SQLノードも接続できてます。

使ってみる


まずは簡単なことから始める、sql1ゾーンでクラスタ用テーブルをつくってみる、テーブルを作るときに「NDB」を指定して作成する。
root@sql1:~# mysql -u root
...
...
mysql> CREATE DATABASE IICHIKODB;
Query OK, 1 row affected (0.06 sec)

mysql> use IICHIKODB
Database changed
mysql> create table cava_club_user(id BIGINT PRIMARY KEY, name VARCHAR(256)) ENGINE NDB;
Query OK, 0 rows affected (0.42 sec)

mysql> INSERT INTO cava_club_user(id, name) VALUES('1', 'Kazuto');
Query OK, 1 row affected (0.01 sec)

mysql>
sql2ゾーンで先ほど入れたデータを確認してみる

root@sql2:~# mysql -u root
...
...
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| IICHIKODB          |
| mysql              |
| ndbinfo            |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql>
mysql> use IICHIKODB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT * FROM cava_club_user;
+----+--------+
| id | name   |
+----+--------+
|  1 | Kazuto |
+----+--------+
1 row in set (0.00 sec)

mysql>
すばらしい、細かいことは抜きにしてとりあえずデータのクラスタ化が確認できる。
こういったシステムは運用がしっかりしていないと大変な感じがしましたね、でもその辺がノウハウであるとも思いますが、PHP書きながら片手間で触るようなシステムではないようです(笑)...


2015年5月4日月曜日

Solaris11.2 pkgbuildでエラー

なぜかエラー


Solaris用のパッケージを作ってて、初めてのエラーに遭遇。
初めは自分で書いたspecが悪いと思って色々いじってみたものの、状況は変わらず...

いろんなマシンで試してみたのの、それも変わらず、どうもマシンのスペック不足だと思い、そこそこのサーバーでビルドしたら問題なくとおる。

最後のガッチャンコで、これは辛い、こんなエラー
pkgbuild: /export/home/karky7/packages/PKGS/SFEmysql-cluster-74-server/reloc/usr/mysql-cluster/7.4/support-files/mysqld_multi.server
pkgbuild: /export/home/karky7/packages/PKGS/SFEmysql-cluster-74-server/reloc/usr/mysql-cluster/7.4/support-files/solaris/postinstall-solaris
pkgbuild: /export/home/karky7/packages/PKGS/SFEmysql-cluster-74-server/reloc/var/svc/manifest/application/database/mysql-cluster-74.xml
pkgbuild: ## Validating control scripts.
pkgbuild: ## Packaging complete.
pkgbuild: WARNING: omitting library/perl-5/dbi-512 from the IPS manifest
pkgbuild: WARNING: omitting library/perl-5/dbd-mysql-512 from the IPS manifest
pkgbuild: WARNING: omitting data/mysql-cluster-gpl-74/library from the IPS manifest
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74_ips.sh
pkgbuild: pkgsend: \'add\' failed for transaction ID \'1430692081_pkg%3A%2F%2Fiichiko3-spec%2Fdatabase%2Fmysql-cluster-gpl-74%407.4.6%2C5.11-0.11.2%3A20150503T222801Z\': 1: Framework error: code: 28 reason: Operation too slow. Less than 1024 bytes/sec transfered the last 30\\
 seconds
pkgbuild: URL: \'http://iichiko3-spec:80/add/0/1430692081_pkg%3A%2F%2Fiichiko3-spec%2Fdatabase%2Fmysql-cluster-gpl-74%407.4.6%2C5.11-0.11.2%3A20150503T222801Z/file\' (happened 3 times)
pkgbuild: 2: Framework error: code: 28 reason: Connection time-out
pkgbuild: URL: \'http://iichiko3-spec:80/add/0/1430692081_pkg%3A%2F%2Fiichiko3-spec%2Fdatabase%2Fmysql-cluster-gpl-74%407.4.6%2C5.11-0.11.2%3A20150503T222801Z/file\'
pkgbuild:
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74%2Flibrary_ips.sh
pkgbuild: PUBLISHED
pkgbuild: pkg://iichiko3-spec/database/mysql-cluster-gpl-74/library@7.4.6,5.11-0.11.2:20150503T223807Z
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74%2Fdoc_ips.sh
pkgbuild: PUBLISHED
pkgbuild: pkg://iichiko3-spec/database/mysql-cluster-gpl-74/doc@7.4.6,5.11-0.11.2:20150503T224304Z
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74%2Ftests_ips.sh
pkgbuild: PUBLISHED
pkgbuild: pkg://iichiko3-spec/database/mysql-cluster-gpl-74/tests@7.4.6,5.11-0.11.2:20150503T224449Z
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74%2Fdevel_ips.sh
pkgbuild: PUBLISHED
pkgbuild: pkg://iichiko3-spec/database/mysql-cluster-gpl-74/devel@7.4.6,5.11-0.11.2:20150503T224814Z
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74%2Fserver_ips.sh
pkgbuild: PUBLISHED
pkgbuild: pkg://iichiko3-spec/database/mysql-cluster-gpl-74/server@7.4.6,5.11-0.11.2:20150503T224822Z
pkgbuild: Executing(%clean): /bin/bash /var/tmp/pkgbuild-karky7/pkgbuild-tmp-21.7750
pkgbuild: + umask 022
pkgbuild: + uname -a
pkgbuild: SunOS sol11_2-cbe 5.11 11.2 i86pc i386 i86pc Solaris
pkgbuild: + cd /export/home/karky7/packages/BUILD
pkgbuild: + cd mysql-cluster-gpl-7.4.6
pkgbuild: + rm -rf /var/tmp/pkgbuild-karky7/SFEmysql-cluster-74-7.4.6-build
pkgbuild: + exit 0
--- command output ends --- finished at Mon May  4 07:48:37 JST 2015

INFO: pkgbuild -ba finished at Mon May  4 07:48:37 JST 2015

INFO: SFEmysql-cluster-74 PASSED

pkgsendが時間かかりすぎで、「Framework error: code: 28 reason: Connection time-out」のあたりが怪しいが、これはもう @ftnk 先生にお願いするほかない...

pkg/socket_timeout count 600

この辺の調整でうまくいかないか?、なにせビルドが時間がかかる...

だれか超強力外人助っ人バリのサーバーくらさい...


2015年5月1日金曜日

焼肉λ@鈴木屋、1年ぶりにカリー化...

ご無沙汰です、ビールがうまかった...
 
思えばhaskellでつながって、リア充で疎遠になって、TwitterやFacebook上でしか安否確認できなかった皆さんにこうして1年ぶりにあえて、ホントに良かったです。



ただ、

「三島haskell無名関数の会」入信すると...
 

「結婚」できるって、

ホントかもしれない、これ伝説になるかもな...


止まりませんね、またみんなで飲みましょう