Well, I just finished my wild-goose chase with Apache and subversion regarding a rather weird error. I recently reinstalled our subversion box, and ever since then I was unable to commit anything new to any of the repositories.
Subversion told me this:
svn-client admin-scripts [1] > svn ci -m "Directories for Tivoli Storage Manager Scripts."
svn: Commit failed (details follow):
svn: MKACTIVITY of '/svn/admin-scripts/!svn/act/someid': 302 Found
Apache didn’t say much about it either, besides this particular line:
[25/Sep/2008:09:22:43 +0200] "MKACTIVITY /svn/admin-scripts/!svn/act/someid HTTP/1.1" 302 331
Today I sat down and thought really hard, what exactly was different from before.
- Installed Trac instead of Redmine, but that can’t have anything to do with the error
- Configured URL rewriting …
As it turns out, the following RewriteRule was the cause:
1
2
3
4
| ## mod_rewrite
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(projects|svn)* [NC]
RewriteRule ^/ http://subversion.home.barfoo.org/projects [L,R] |
After changing the Rewrite Rule (as showed below, compare the difference yourself
), it works just like a charm.
1
2
3
4
| ## mod_rewrite
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(projects|svn)/*$ [NC]
RewriteRule ^/$ http://subversion.home.barfoo.org/projects [L,R] |
Hint to self: whenever encountering HTTP 302 in conjunction with Subversion, check the RewriteRule’s
Life
Apache, mod_rewrite, subversion, Work
Well, since we received part of our shipment on Wednesday, I finally looked at how we’re gonna deploy our active/active Tivoli Storage Manager configuration. Right now, we do have a single pSeries box hosting ~100 client nodes which we’re looking to split by two (since we do have two x366 for that purpose now).
Now, as there ain’t no solution for this scenario yet (neither from International Business Machines nor someone out of the open source community), I sat down and started writing an OCF Resource agent for dsmserv (that is the Tivoli Storage Manager server).
At first I had a bit trouble adjusting myself on how stupid/non-standard dsmserv is, but after reading through the Storage Manager Installation handbook (on multiple installations on a single server) and through some peoples notes on multiple deployments of Tivoli Storage Manager on the same server, I think I managed to get my head around it.
I still think the resource agent lacks some real testing (I put a two node cluster online on Tuesday, but that is non-productive), but that’ll happen soon.
Read more…
Life
Linux-HA, OCF, Resource agent, SLES10, Work
I just had another look at what I wrote the week before last (you know, being home-sick/on vacation has it’s advantages) and additionally read up on “OPTIMIZE TABLE” again. The comments in the manual mention “SHOW TABLE STATUS“, which gives you a complete list, but it doesn’t allow you to filter certain kinds of things out (like I only wanted to see MyISAM tables in the list, I only wanted database and table).
So I went ahead and looked around in MySQL’s own databases and if you look closely at information_schema, it’s got a list of all databases/tables with an additional pointer whether or not databases are fragmented, the row Data_free. I only found this, because I looked at how the mysqltuner figured whether or not you have fragmented tables.
So, without further ado, here’s the final script I’m gonna torture for the next week:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #!/bin/bash
# Get a list of all fragmented tables
FRAGMENTED_TABLES="$( mysql -e 'use information_schema; SELECT TABLE_SCHEMA,TABLE_NAME \
FROM TABLES WHERE TABLE_SCHEMA NOT IN ("information_schema","mysql") AND \
Data_free > 0' | grep -v "^+" | sed "s,\t,.," )"
for fragment in $FRAGMENTED_TABLES; do
database="$( echo $fragment | cut -d. -f1 )"
table="$( echo $fragment | cut -d. -f2 )"
[ $fragment != "TABLE_SCHEMA.TABLE_NAME" ] && mysql -e "USE $database;\
OPTIMIZE TABLE $table;" > /dev/null 2>&1
done
# vim: set tw=80 ts=2 st=2 et : |
I know it ain’t completely bullet proof and it sure as hell isn’t neat, but I think it does the job. Also, if you don’t want to paste it, here’s the file download.
Life
MySQL, Work